in reply to Re: Variable matching on a regex
in thread Variable matching on a regex
not really sure why the last match doesn't get included or why the first one is undef
I think the capture group needs to be closed before being able to push its value. This would work without further ado:
$data =~ /^(?:(\d+)\s*(?{ push @results, $^N }))+$/;
(Update) P.S.: if you use this construct in a loop like in the OP's case, you need to declare the lexical @results outside of the loop for it to work properly. I.e., while this is ok:
my @results; while (<DATA>) { @results = (); /^(?:(\d+)\s*(?{ push @results, $^N }))+$/; print "line $.: ", join('-', @results), "\n"; } __DATA__ 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7
output:
line 1: 1-2-3-4-5 line 2: 2-3-4-5-6 line 3: 3-4-5-6-7
the following would work only once:
while (<DATA>) { my @results; /^(?:(\d+)\s*(?{ push @results, $^N }))+$/; print "line $.: ", join('-', @results), "\n"; }
output:
line 1: 1-2-3-4-5 line 2: line 3:
(Fixed /^(:?... typo — thanks eric256! )
In Section
Seekers of Perl Wisdom