#!/usr/bin/perl
use strict;
use warnings;
my $string = "111s11111s11111s";
sub skip_greedy {
my ($string, $skips) = @_;
print "Greedy matching, skip $skips - ";
print $string =~ /^(.*)s(?(?{$skips-- > 0})(*FAIL))/ ? "$1\n"
: "no match\n";
}
skip_greedy($string, $_) for (0..3);
sub all_matches {
my ($string) = @_;
my @seqs;
$string =~ /^(.*)s(?{push @seqs, $1})(*FAIL)/;
}
use Data::Dumper;
print Dumper
[ all_matches
($string) ]; print Dumper
[ all_matches
($string) ];
IyEvdXNyL2Jpbi9wZXJsCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpteSAkc3RyaW5nID0gIjExMXMxMTExMXMxMTExMXMiOwoKc3ViIHNraXBfZ3JlZWR5IHsKICAgIG15ICgkc3RyaW5nLCAkc2tpcHMpID0gQF87CgogICAgcHJpbnQgIkdyZWVkeSBtYXRjaGluZywgc2tpcCAkc2tpcHMgLSAiOwoKICAgIHByaW50ICRzdHJpbmcgPX4gL14oLiopcyg/KD97JHNraXBzLS0gPiAwfSkoKkZBSUwpKS8KICAgICAgICA/ICIkMVxuIgogICAgICAgIDogIm5vIG1hdGNoXG4iOwp9Cgpza2lwX2dyZWVkeSgkc3RyaW5nLCAkXykgZm9yICgwLi4zKTsKCnN1YiBhbGxfbWF0Y2hlcyB7CiAgICBteSAoJHN0cmluZykgPSBAXzsKCiAgICBteSBAc2VxczsKICAgICRzdHJpbmcgPX4gL14oLiopcyg/e3B1c2ggQHNlcXMsICQxfSkoKkZBSUwpLzsKCiAgICBteSBAc29ydGVkID0gc29ydCB7bGVuZ3RoICRiIDw9PiBsZW5ndGggJGF9IEBzZXFzOwoKICAgIHJldHVybiBAc29ydGVkOwp9Cgp1c2UgRGF0YTo6RHVtcGVyOwoKcHJpbnQgRHVtcGVyIFsgYWxsX21hdGNoZXMoJHN0cmluZykgXTsKcHJpbnQgRHVtcGVyIFsgYWxsX21hdGNoZXMoJHN0cmluZykgXTs=
Greedy matching, skip 0 - 111s11111s11111
Greedy matching, skip 1 - 111s11111s11111
Greedy matching, skip 2 - 111s11111s11111
Greedy matching, skip 3 - 111s11111s11111
$VAR1 = [
'111s11111s11111',
'111s11111',
'111'
];
$VAR1 = [];
Variable "$skips" will not stay shared at (re_eval 1) line 1.
Variable "@seqs" will not stay shared at (re_eval 2) line 1.