in reply to Variable scoping oddity inside (??{ ... })
Scoping issues with code evaluation asserstions? deals with the exact same problem. You can get around it with a global as diotalevi suggested, but somewhere in that thread (in a discussion with diotalevi no less) I suggested using a local alias to a lexical instead. For example, change
tomy $ok = 1; # set private variable $ok = 1 $str =~ m/(.)(.)(??{ $ok = 0 if $2 lt $1; 0 })/;
my $ok = 1; local *myok = \$ok; # Needed to avoid closure in code assertion. $str =~ m/(.)(.)(??{ $myok = 0 if $2 lt $1; 0 })/;
I still think that's the best way to handle it.
P.S. As a matter of good style, it's best to avoid comments — like "set private variable $ok = 1" — that just restate the code without adding information. You really don't have to tell anyone what my $ok = 1; does. On the other hand, it may be helpful to explain what $ok is used for.
-sauoq "My two cents aren't worth a dime.";
|
|---|