use Test::More 'no_plan'; use Regexp::MatchContext -vars; my $str = 'foobarbaz'; $str =~ m/ bar (?p)/x; is $PREMATCH, 'foo' => '$PREMATCH set correctly'; is $MATCH, 'bar' => '$MATCH set correctly'; is $POSTMATCH, 'baz' => '$POSTMATCH set correctly'; $str =~ m/ bar /x; ok !defined $PREMATCH, => '$PREMATCH unset correctly'; ok !defined $MATCH, => '$MATCH unset correctly'; ok !defined $POSTMATCH, => '$POSTMATCH unset correctly'; $str =~ m/ baz (?p)/x; is $PREMATCH, 'foobar' => '$PREMATCH set correctly again'; is $MATCH, 'baz' => '$MATCH set correctly again'; is $POSTMATCH, '' => '$POSTMATCH set correctly again'; $str =~ m/ qux (?p)/x; is $PREMATCH, 'foobar' => '$PREMATCH left correctly on fail'; is $MATCH, 'baz' => '$MATCH left correctly on fail'; is $POSTMATCH, '' => '$POSTMATCH left correctly on fail'; $str =~ m/ foo (?p)/x; is $PREMATCH, '' => '$PREMATCH set correctly yet again'; is $MATCH, 'foo' => '$MATCH set correctly yet again'; is $POSTMATCH, 'barbaz' => '$POSTMATCH set correctly yet again'; $str =~ m/ foobarbaz (?p)/x; is $PREMATCH, '' => '$PREMATCH set correctly once again'; is $MATCH, 'foobarbaz' => '$MATCH set correctly once again'; is $POSTMATCH, '' => '$POSTMATCH set correctly once again'; $str =~ m/ bar /x; ok !defined $PREMATCH, => '$PREMATCH unset correctly again'; ok !defined $MATCH, => '$MATCH unset correctly again'; ok !defined $POSTMATCH, => '$POSTMATCH unset correctly again'; $str =~ m/ bar (?p)/x; $PREMATCH = '111'; is $str, '111barbaz' => '$PREMATCH assignment worked'; $MATCH = '222'; is $str, '111222baz' => '$MATCH assignment worked'; $POSTMATCH = '333'; is $str, '111222333' => '$POSTMATCH assignment worked'; $str = 'foobarbaz'; $str =~ m/ bar (?p)/x; $POSTMATCH = '33'; is $str, 'foobar33' => '$POSTMATCH assignment worked again'; $PREMATCH = '1111'; is $str, '1111bar33' => '$PREMATCH assignment worked again'; $MATCH = '222'; is $str, '111122233' => '$MATCH assignment worked again'; $str = 'foobarbaz'; $str =~ m/ bar /x; ok !defined eval{ $PREMATCH = '1'; 1 } => 'Bad $PREMATCH assignment failed'; is substr($@,0,47), q{Can't assign to $PREMATCH because the preceding} => 'Correct $PREMATCH error'; ok !defined eval{ $MATCH = '1'; 1 } => 'Bad $MATCH assignment failed'; is substr($@,0,44), q{Can't assign to $MATCH because the preceding} => 'Correct $MATCH error'; ok !defined eval{ $POSTMATCH = '1'; 1 } => 'Bad $POSTMATCH assignment failed'; is substr($@,0,48), q{Can't assign to $POSTMATCH because the preceding} => 'Correct $POSTMATCH error';