http://qs321.pair.com?node_id=1126172


in reply to Re: Problem with input strings that have "[]" brackets
in thread Problem with input strings that have "[]" brackets

Using qr (quote regex-wise) and allowing for the spaces in $line also works:

use 5.018; my $line = ' [Category("notestrecord")]'; my $pattern = qr/[Category("notestrecord")]/; if($line =~ /\s*$pattern/)

Are sure that qr// in combination with use 5.018 magically adds the missing quotemeta? My perl 5.18.1 does not show that behavior:

>perl -e 'use 5.018; my $x=qr/a[bc]d/; say("|$_| matches |$x|: ",$_=~/ +$x/ ? "yes" : "no") for ( "abd","acd","abcd","a[bc]d" )' |abd| matches |(?^u:a[bc]d)|: yes |acd| matches |(?^u:a[bc]d)|: yes |abcd| matches |(?^u:a[bc]d)|: no |a[bc]d| matches |(?^u:a[bc]d)|: no >

Your script matches $line against zero or more whitespace characters, followed by one of the characters "()Cacdegnorsty. The C in $line matches this condition.

I can freely change the order of characters and remove duplicates in qr/[]/ without changing the script output:

#!/usr/bin/perl -w use 5.018; # 1126143 my $line = ' [Category("notestrecord")]'; my $pattern = qr/["()Cacdegnorsty]/; if($line =~ /\s*$pattern/) { print "Matched |$pattern| in |$line|"; # vbars to show spaces (& + lack of spaces) } else { print "No match!"; } =head OUTPUT: Matched |(?^u:[Category("notestrecord")])| in | [Category("note +strecord")]| =cut
>perl 1126159-modified.pl Matched |(?^u:["()Cacdegnorsty])| in | [Category("notestrecord" +)]| >

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)