anchor.diff:  
   (in-package #:perlre)
   ;(named-readtables:in-readtable lol:lol-syntax)
  +(set-dispatch-macro-character #\# #\` 'lol:|#`-reader|)
   
   (defun segment-reader (s c n)
     "evaluation with / / delimiters, no evaluation with any other corresponding delimiter"
  
positive.code:         (t (ppcre:split (format nil "(?~a)~a" ,,g!m ,(car ,g!a)) ,',g!s)))))
  
  (defun xxx (s c n)
    (case (read-char s)
      (#\m (mat (segment-reader s (read-char s) 1) (mods s)))
      (#\d (div (segment-reader s (read-char s) 1) (mods s))) ; divide for split
  
negative.code:              ,conseq))
           ,altern))))
  
  
  ;geht
  (lol:defmacro! ifmatch ((test o!s) conseq &optional altern)
    (let* ((dollars (remove-duplicates (remove-if-not #'lol:dollar-symbol-p (lol:flatten conseq))))
           (top (or (car (sort (mapcar #'lol:dollar-symbol-p dollars) #'>)) 0)))
      `(multiple-value-bind (m a) (,test ,g!s)
         (declare (ignorable a))
         (if m
           (let* ((ml (ppcre:split (format nil "(~a)" m) ,g!s :with-registers-p t :limit 3))
                  ,@#1=(append (mapcar (lambda (a1) `(,(lol:symb "$" a1) (trivia:match ml ((list a b c) (case ',a1 (\` a) (& b) (\' c))))))
                                       '(\` & \'))
                               (mapcar (lambda (a1) `(,(lol:symb "$" a1) (aref a (1- ,a1)))) (loop for i from 1 to top collect i))))
             (declare (ignorable ,@(mapcar #'car #1#)))
             ,conseq)
           ,altern))))
  
  ;geht
  (lol:defmacro! ifmatch ((test o!s) conseq &optional altern)
    (let* ((dollars (remove-duplicates (remove-if-not #'lol:dollar-symbol-p (lol:flatten conseq))))
           (top (or (car (sort (mapcar #'lol:dollar-symbol-p dollars) #'>)) 0)))
      `(multiple-value-bind (m a) (,test ,g!s)
         (declare (ignorable a))
         (if m
           (let* ((ml (#~d/(format nil "(~a)" m)/r3 ,g!s))
                  ,@#1=(append (mapcar (lambda (a1) `(,(lol:symb "$" a1) (trivia:match ml ((list a b c) (case ',a1 (\` a) (& b) (\' c))))))
                                       '(\` & \'))
                               (mapcar (lambda (a1) `(,(lol:symb "$" a1) (aref a (1- ,a1)))) (loop for i from 1 to top collect i))))
             (declare (ignorable ,@(mapcar #'car #1#)))
             ,conseq)
           ,altern))))
  
  ;geht, scheint eher langsam zu sein ??
  (lol:defmacro! ifmatch ((test o!s) conseq &optional altern)
    (let* ((dollars (remove-duplicates (remove-if-not #'lol:dollar-symbol-p (lol:flatten conseq))))
           (top (or (car (sort (mapcar #'lol:dollar-symbol-p dollars) #'>)) 0)))
      `(multiple-value-bind (m a) (,test ,g!s)
         (declare (ignorable a))
         (if m
           (let* (,@#1=(append (mapcar (lambda (a1) `(,(lol:symb "$" a1) (trivia:match (#~d/(format nil "(~a)" m)/r3 ,g!s) ((list a b c) (case ',a1 (\` a) (& b) (\' c))))))
                                       '(\` & \'))
                               (mapcar (lambda (a1) `(,(lol:symb "$" a1) (aref a (1- ,a1)))) (loop for i from 1 to top collect i))))
             (declare (ignorable ,@(mapcar #'car #1#)))
             ,conseq)
           ,altern))))
  
  ;geht auch mit hh helper
  (set-dispatch-macro-character #\# #\` 'lol:|#`-reader|)
  
  (lol:defmacro! ifmatch ((test o!s) conseq &optional altern)
    (let* ((dollars (remove-duplicates (remove-if-not #'lol:dollar-symbol-p (lol:flatten conseq))))
           (top (or (car (sort (mapcar #'lol:dollar-symbol-p dollars) #'>)) 0)))
      `(multiple-value-bind (m a) (,test ,g!s)
         (declare (ignorable a))
         (if m
           (let* (,@#1=(append (mapcar #`,`(,(lol:symb "$" a1) (trivia:match (#~d/(format nil "(~a)" m)/r3 ,g!s) ((list a b c) (case ',a1 (\` a) (& b) (\' c)))))
                                       '(\` & \'))
                               (mapcar #`,`(,(lol:symb "$" a1) (aref a (1- ,a1))) (loop for i from 1 to top collect i))))
             (declare (ignorable ,@(mapcar #'car #1#)))
             ,conseq)
           ,altern))))
  
  ;simple reformat
  (lol:defmacro! ifmatch ((test o!s) conseq &optional altern)
    (let* ((dollars (remove-duplicates (remove-if-not #'lol:dollar-symbol-p (lol:flatten conseq))))
           (top (or (car (sort (mapcar #'lol:dollar-symbol-p dollars) #'>)) 0)))
      `(multiple-value-bind (m a) (,test ,g!s)
         (declare (ignorable a))
         (if m
           (let* (,@#1=(append (mapcar #`,`(,(lol:symb "$" a1) (trivia:match (#~d/(format nil "(~a)" m)/r3 ,g!s) 
                                                                 ((list a b c) (case ',a1 (\` a) (& b) (\' c)))))
                                       '(\` & \'))
                               (mapcar #`,`(,(lol:symb "$" a1) (aref a (1- ,a1))) (loop for i from 1 to top collect i))))
             (declare (ignorable ,@(mapcar #'car #1#)))
             ,conseq)
           ,altern))))
  
  |#
  
  ;geht
  ;(time (dotimes (x 100000) (pre:ifmatch (#~m'a' "a") 1 2)))  ; 5.766 seconds
  (lol:defmacro! ifmatch ((test o!s) conseq &optional altern)
    (let* ((dollars (remove-duplicates (remove-if-not #'lol:dollar-symbol-p (lol:flatten conseq))))
           (top (or (car (sort (mapcar #'lol:dollar-symbol-p dollars) #'>)) 0)))
      `(multiple-value-bind (m a) (,test ,g!s)
         (declare (ignorable a))
         (if m
           (let* (,@#1=(append (mapcar #`,`(,(lol:symb "$" a1) (trivia:match (#~d/(format nil "(~a)" m)/r3 ,g!s) ((list a b c) (case ',a1 (\` a) (& b) (\' c))))) '(\` & \'))
                               (mapcar #`,`(,(lol:symb "$" a1) (aref a (1- ,a1))) (loop for i from 1 to top collect i))))
             (declare (ignorable ,@(mapcar #'car #1#)))
             ,conseq)
           ,altern))))
  
  ;orig
  ;(time (dotimes (x 100000) (pre:ifmatch (#~m'a' "a") 1 2))) ; ;1.542 seconds of real time
  (lol:defmacro! ifmatch ((test o!s) conseq &optional altern)
    (let* ((dollars (remove-duplicates (remove-if-not #'lol:dollar-symbol-p (lol:flatten conseq))))
           (top (or (car (sort (mapcar #'lol:dollar-symbol-p dollars) #'>)) 0)))
      `(multiple-value-bind (m a) (,test ,g!s)
         (declare (ignorable a))
         (if m
           (let ((ml (ppcre:split (format nil "(~a)" m) ,g!s :with-registers-p t :limit 3)))
             (let ,#1=(append (mapcar (lambda (a1) `(,(lol:symb "$" a1) (trivia:match ml ((list a b c) (case ',a1 (\` a) (& b) (\' c))))))
                                      '(\` & \'))
                              (mapcar (lambda (a1) `(,(lol:symb "$" a1) (aref a (1- ,a1)))) (loop for i from 1 to top collect i)))
               (declare (ignorable ,@(mapcar #'car #1#)))
               ,conseq))
           ,altern))))
  
  ;(time (dotimes (x 100000) (pre:ifmatch (#~m'a' "a") 1 2))) ; 2.0 seconds of real time
  (lol:defmacro! ifmatch ((test o!s) conseq &optional altern)
    (let* ((dollars (remove-duplicates (remove-if-not #'lol:dollar-symbol-p (lol:flatten conseq))))
           (top (or (car (sort (mapcar #'lol:dollar-symbol-p dollars) #'>)) 0)))
      `(multiple-value-bind (m a) (,test ,g!s)
         (declare (ignorable a))
         (if m
           (let* ((ml (#~d/(format nil "(~a)" m)/r3 ,g!s))
                  ,@#1=(append (mapcar #`,`(,(lol:symb "$" a1) (trivia:match ml ((list a b c) (case ',a1 (\` a) (& b) (\' c))))) '(\` & \'))
                               (mapcar #`,`(,(lol:symb "$" a1) (aref a (1- ,a1))) (loop for i from 1 to top collect i))))
             (declare (ignorable ,@(mapcar #'car #1#)))
             ,conseq)
           ,altern))))
  
  
  
  (defmacro whenmatch ((test s) &rest conseq) `(ifmatch (,test ,s) (progn ,@conseq)))
  
  ;(ifsplit $1 $2 ..?
  