in reply to Re: Empty pattern in regex
in thread Empty pattern in regex
> but it is intended to use the last successfully matched regexp
Whatever its intent, it is one confusing puppy. //; always matches, always returns TRUE, but it never changes $&. $& is always whatever the previous regex set it to, whether it matched or not, effectively a NOP. Consider this:
$_ = 'Hello Perl'; say '$_ = \'Hello Perl\';'; print "\$1: $1\n\$2: $2\n\$3: $3\n\$&: $&\n\n"; # unsuccessful match /Python/; print "No match, \/Python\/\n"; print "\$1: $1\n\$2: $2\n\$3: $3\n\$&: $&\n\n"; # successful match if (//) { print "No nothing, if (\/\/) {\n"; print "\$1: $1\n\$2: $2\n\$3: $3\n\$&: $&\n\n"; } else { print "\/\/ unsuccessfull match"; } # successful match, no captures /Perl/; print "Match \/Perl\/, No captures\n"; print "\$1: $1\n\$2: $2\n\$3: $3\n\$&: $&\n\n"; # successful match, empty pattern if (//) { print "No nothing, if (\/\/) {\n"; print "\$1: $1\n\$2: $2\n\$3: $3\n\$&: $&\n\n"; } else { print "\/\/ unsuccessfull match"; } # successful match, no captures /Perl/; print "Match \/Perl\/, No captures\n"; print "\$1: $1\n\$2: $2\n\$3: $3\n\$&: $&\n\n"; # successful match, no pattern, empty parens if (/()/) { #//; print "No nothing, if \(\/\(\)\/\) {\n"; print "\$1: $1\n\$2: $2\n\$3: $3\n\$&: $&\n\n"; } else { print "\/\/ unsuccessfull match"; }
Which results in:
$_ = 'Hello Perl';
$1:
$2:
$3:
$&:
No match, /Python/
$1:
$2:
$3:
$&:
No nothing, if (//) {
$1:
$2:
$3:
$&:
Match /Perl/, No captures
$1:
$2:
$3:
$&: Perl
No nothing, if (//) {
$1:
$2:
$3:
$&: Perl
Match /Perl/, No captures
$1:
$2:
$3:
$&: Perl
No nothing, if (/()/) {
$1:
$2:
$3:
$&:
What is or was the purpose of this construction? How would one use it?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Empty pattern in regex
by choroba (Cardinal) on Oct 19, 2023 at 19:02 UTC | |
by perlboy_emeritus (Scribe) on Oct 20, 2023 at 20:08 UTC | |
|
Re^3: Empty pattern in regex
by hv (Prior) on Oct 19, 2023 at 19:56 UTC | |
by perlboy_emeritus (Scribe) on Oct 19, 2023 at 20:44 UTC |