summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ankarström <john@ankarstrom.se>2021-05-26 01:54:09 +0200
committerJohn Ankarström <john@ankarstrom.se>2021-05-26 01:54:09 +0200
commitb511a4ced9c0e48fdc35db2b0ae9d454e72bf800 (patch)
tree2e7a17c450a92afaa4945342a68329bfe841ed06
parentb9ed52e3684e49b9b00ef08b29111758cc4777ee (diff)
downloadmum-b511a4ced9c0e48fdc35db2b0ae9d454e72bf800.tar.gz
mum: Clean up regular expression
-rwxr-xr-xsrc/mum26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/mum b/src/mum
index 3c7d0b0..402053e 100755
--- a/src/mum
+++ b/src/mum
@@ -14,26 +14,30 @@ open my $tty, '+<:unix', '/dev/tty' or die "Could not open /dev/tty: $!";
# Define range syntax
my @range; # range (one/two references)
-our %ref; # current reference in range
+our %ref; # current reference
my $d = qr{
(?(DEFINE)
- (?<range> (?{ @range = () })
+ (?<range> (?{ @range = () })
( (?&ref)
| (?&ref),(?&ref)
- | (?&pattern)
+ | (?&grep)
)
- (?{ push @range, \%ref })
+ (?{ push @range, \%ref })
)
- (?<ref> ( (\d+) (?{ local %ref = (line => $^N) })
- | (\.|\$) (?{ local %ref = (spec => $^N) })
- | ' ([a-z]) (?{ local %ref = (mark => $^N) })
- | /((\\/|[^/])*)/ (?{ local %ref = (next => $^N) })
- | \?((\\\?|[^?])*)\? (?{ local %ref = (prev => $^N) })
+ (?<ref> ( (\d+) (?{ local %ref = (line => $^N) })
+ | (\.|\$) (?{ local %ref = (spec => $^N) })
+ | ' ([a-z]) (?{ local %ref = (mark => $^N) })
+ | (?&next) (?{ local %ref = (next => $^R) })
+ | (?&prev) (?{ local %ref = (prev => $^R) })
)
- ( ([+-] \d+) (?{ local %ref = (%ref, plus => $^N) })
+ ( ([+-] \d+) (?{ local %ref = (%ref, plus => $^N) })
)?
)
- (?<pattern> g/((\\/|[^/])*)/ (?{ local %ref = (patt => $^N) })
+ (?<grep> g((?&next)) (?{ local %ref = (grep => $^R) })
+ )
+ (?<next> /(([^/\\]++ | \\.)*+)/ (?{ $^N })
+ )
+ (?<prev> \?(([^?\\]++ | \\.)*+)\? (?{ $^N })
)
)
}x;