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: <%-{-{-{-<
In reply to Re^3: Delimiters in Regexp::Common (updated)
by AnomalousMonk
in thread Delimiters in Regexp::Common
by rongrw
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |