On 01/17/2016 06:07 PM, Tom Browder wrote: > I'm trying to write all new Perl code in Perl 6. One thing I need is > the equivalent of the Perl 5 qr// and, following Perl 6 docs, I've > come to use something like this (I'm trying to ignore certain > directories): > > # regex of dirs to ignore > my regex dirs { > \/home\/user\/\.cpan | > \/home\/tbrowde\/\.emacs > }
Better written as my regex dirs { | '/home/user/.cpan' | '/home/tbowde/.emacs' } Yes, quoting does now work in regexes too. Cool, right? :-) (The leading | is ignored, it just allows you to format the alternation more consistently) > for "dirlist.txt".IO.lines -> $line { > # ignore certain dirs > if $line ~~ m{<dirs>} { > next; > } > } > > My question: Is there a way to have Perl 6 do the required escaping > for the regex programmatically, i.e., turn this: > > my $str = '/home/usr/.cpan'; > > into this: > > my regex dirs { > \/home\/usr\/\.cpan > } > > automatically? Even better: No need to escape anymore. If you use $str in a regex, and it actually contains a Str, it is always taken to match literally, so my $dir1 = '/home/user/.cpan'; my $dir2 = '/home/tbowde/.emacs'; my regex ignore_dirs { $dir1 | $dir2 } does what you want. If you want the interpolated string to be treated as a regex, you have to use it as my regex dirs { <$dir1> }. Cheers, Moritz