in reply to Re^5: reg expression question
in thread reg expression question

It is this "Without the /whatever modifier, whatever means ...; with the modifier it means..." locution that is the rationale for the kneejerk practice of always using the /xms constellation of modifiers with every regex regardless of whether  . ^ $ appear in the regex or not, and regardless of the fact that /x arguably makes it a bit more messy to deal with whitespace.

I have adopted this practice, first encountered in the (in)famous PBP of TheDamian, because for me, regexes are hard enough without the further confusion of unnecessary degrees of freedom. Now, what does  . (dot) match? Everything! YBPMV.

Update: See also re '/flags' mode, but I tend to avoid this in PM examples because it only appeared with Perl version 5.14 and has too narrow familiarity.


Give a man a fish:  <%-(-(-(-<

Replies are listed 'Best First'.
Re^7: reg expression question
by healingtao (Novice) on Jan 29, 2015 at 16:04 UTC
    Can you please confirm based on your comments I made the following changes
    sub rewrite { my ($string) = @_; my ($left, $right) = split /\s+/, $string, 2; if (my @m = $right =~ /^\d{2}(\d{2})(.*)/) { $right = $m[0] . ($m[1] =~ /^-/ ? '' : '-') . $m[1]; // here are the new additions $right =~ s/\s+//g; $right =~ s/-$//; } else { $right = '-' . $right unless $right =~ /^-/; } return $left . $right; } Please confirm that this is what you meant. Thanks

      Almost; except that PUN VALEY B still isn’t handled correctly. That’s because it doesn’t match the regex, so the if clause isn’t entered and the substitutions are not applied. But if you move the two substitutions from within the if clause to after the else clause — that is, to immediately before the return line — then all the tests pass.

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

        excellent, all is working now. Thanks very much for your help. Best Regards