in reply to Re^2: Delimiters in Regexp::Common
in thread Delimiters in Regexp::Common
The point is that in:
print "P1 has path\n" if ($P1 =~ /$RE{delimited}{ -delim => '\\\/' }/ );
the quoted string becomes
-delim => '\/' ;
In:
print "P1 has path\n" if ($P1 =~ /$RE{delimited}{ -delim => '\/' }/ );
The quoted string becomes:
-delim => '/' ;
This is because the \ is treated as an escape character beteween //.
I disagree. In the index expression of an array (positional or associative), the expression is evaluated in scalar context and not in the double-quotish context of a regex into which the array element may happen to be interpolated. So '\\\/' and '\/' are evaluated in single-quotish context and become the character sequences \\/ and \/ respectively. And because of the way backslashes are interpreted in single-quote context, '\\\\/' and '\\\/' are equivalent, and '\\/' and '\/' likewise. E.g.:
c:\@Work\Perl\monks\Veltro>perl -wMstrict -MData::Dump -le "my %RE = ( '\\\\/' => 'BackBackFwd1', '\\\/' => 'BackBackFwd2', '\\/' => 'BackFwd1', '\/' => 'BackFwd2', '/' => 'Fwd', ); dd \%RE; ;; my $rx = qr{ $RE{'\\\\/'} $RE{'\\\/'} $RE{'\\/'} $RE{'\/'} $RE{'/'} } +; print $rx; " { "/" => "Fwd", "\\/" => "BackFwd2", "\\\\/" => "BackBackFwd2" } (?^: BackBackFwd2 BackBackFwd2 BackFwd2 BackFwd2 Fwd )
There are a couple of Data::Dump::dd() and hash peculiarities:
Give a man a fish: <%-{-{-{-<
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Delimiters in Regexp::Common (updated)
by Veltro (Hermit) on May 07, 2018 at 23:02 UTC | |
by AnomalousMonk (Archbishop) on May 08, 2018 at 20:57 UTC | |
by swl (Prior) on May 08, 2018 at 09:27 UTC | |
by Veltro (Hermit) on May 08, 2018 at 10:40 UTC | |
by swl (Prior) on May 08, 2018 at 12:30 UTC |