WareLogging, PerlCode, RegularExpressions.
|
|
|
|
* http://www.pcre.org/
|
|
* perldoc: [http://perldoc.perl.org/perlreref.html perlreref] - RegEx reference
|
|
* MasteringRegularExpressions
|
|
|
|
Little RegEx tricks:
|
|
|
|
# Stuff in parentheses is slurped into the elements of @results
|
|
@results = $string =~ m/stuff, (more stuff), and (some other stuff)/;
|
|
|
|
# Here, $result is forced into list context and so contains (more stuff).
|
|
# Without parentheses, it would just contain 1 or 0, depending on the pattern match.
|
|
($result) = $string =~ m/stuff, (more stuff), and some other stuff/;
|
|
|
|
Store a regex:
|
|
|
|
$re = qr/whatever/;
|
|
|
|
= a thing which has recently bitten me =
|
|
|
|
When using s///x, keep in mind that whitespace continues to be significant in your substitution, which is after all a string.
|
|
|
|
For example, this will be fine:
|
|
|
|
$block =~ s/([^"\n]) # not a double-quote or newline
|
|
\n # end-of-line
|
|
([^\n]) # not a newline
|
|
/$1$newlines{$key}$2/xgs;
|
|
|
|
While this will be all kinds of problematic:
|
|
|
|
|
|
$block =~ s/([^"\n]) # not a double-quote or newline
|
|
\n # end-of-line
|
|
([^\n]) # not a newline
|
|
/$1
|
|
$newlines{$key}
|
|
$2
|
|
/xgs;
|
|
|
|
Incidentally, I think this is better written as:
|
|
|
|
$block =~ s/(?<=[^"\n]) # not a double-quote or newline
|
|
\n # end-of-line
|
|
(?=[^\n]) # not a newline
|
|
|
|
/$newlines{$key}/xgs;
|