haukex has asked for the wisdom of the Perl Monks concerning the following question:
I am working on some code code that boils down to:
'g'=~/g/; my $regex = 'm{}g'; # user input my $text = 'x'; # user input eval qq{ use re 'debug'; print "<\$&>\\n" while \$text =~ $regex; };
Which only produces this output:
Compiling REx "" Final program: 1: NOTHING (2) 2: END (0) minlen 0 Freeing REx: ""
As per perlop:
The empty pattern //
If the PATTERN evaluates to the empty string, the last successfully matched regular expression is used instead. In this case, only the g and c flags on the empty pattern are honored; the other flags are taken from the original pattern. If no match has previously succeeded, this will (silently) act instead as a genuine empty pattern (which will always match).
So in other words, it's silently (!) matching $text against /g/. Is there some way to reset the state of the regex engine so that the empty pattern always acts as a genuine empty pattern? it acts as if no other regex has been executed before $regex? I think that'd make more sense to the users instead of the current confusing behavior. (I think I'll display a message to the user about the empty pattern in any case.)
Update: Updated explanation in final paragraph.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Reset meaning of empty pattern?
by tybalt89 (Monsignor) on Sep 01, 2018 at 12:18 UTC | |
by haukex (Archbishop) on Sep 01, 2018 at 16:44 UTC | |
by Anonymous Monk on Sep 01, 2018 at 15:19 UTC | |
|
Re: Reset meaning of empty pattern?
by LanX (Saint) on Sep 01, 2018 at 12:31 UTC | |
by haukex (Archbishop) on Sep 01, 2018 at 16:47 UTC | |
by LanX (Saint) on Sep 01, 2018 at 16:57 UTC | |
by haukex (Archbishop) on Sep 01, 2018 at 16:58 UTC | |
|
Re: Reset meaning of empty pattern?
by tybalt89 (Monsignor) on Sep 01, 2018 at 12:14 UTC | |
by LanX (Saint) on Sep 01, 2018 at 15:48 UTC | |
by tybalt89 (Monsignor) on Sep 01, 2018 at 16:45 UTC | |
by haukex (Archbishop) on Sep 01, 2018 at 16:52 UTC | |
|
Re: Reset meaning of empty pattern?
by ikegami (Patriarch) on Sep 02, 2018 at 06:34 UTC |