Hi, merry Xmas,

This RE doesn't do what I expected:

#!perl -w
$_ = 'data 1
data 2
data 3
head 1
head 2
head 3';
my $a = /^dat.*\n       #match 1st line
        (?s)            #turn on . matching any char
        (.*?3)/x;       #should match data 2 and 3
print 'result: ',$a,', $1=',$1||'no match',"\n";
1;
__END__

result: 1, $1=head 3

I thought that '^dat.*\n' would match only the 1st line 'data 1', because '.' doesn't 
match a new line.

Then '(?s)' should make '.' match any char, including new line.
Then '(.*?3)' should match lines 'data 2' and 'data 3'.

It's not what happens. Anyone can explain ?

If the 1st part of the RE is ^dat.*?\n, then:

result: 1, $1=data 2
data 3

Why do we have to make it ungreedy ? Thanks.

MacPerl 5.20r4

Reply via email to