1use re Debug=>qw(DUMP EXECUTE OFFSETS TRIEC TEST); 2my @tests=( 3 XY => 'X(A|[B]Q||C|D)Y' , 4 foobar => '[f][o][o][b][a][r]', 5 x => '.[XY].', 6 'ABCD' => '(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)', 7 'D:\\dev/perl/ver/28321_/perl.exe'=> 8 '/(\\.COM|\\.EXE|\\.BAT|\\.CMD|\\.VBS|\\.VBE|\\.JS|\\.JSE|\\.WSF|\\.WSH|\\.pyo|\\.pyc|\\.pyw|\\.py)$/i', 9 'q'=>'[q]', 10 "path_sep:\t8490" => '^(\\S{1,9}):\\s*(\\d+)$', 11 '' => '(?(DEFINE)(?<foo>foo))(?(DEFINE)(?<bar>(?&foo)bar))(?(DEFINE)(?<baz>(?&bar)baz))(?(DEFINE)(?<bop>(?&baz)bop))', 12); 13while (@tests) { 14 my ($str,$pat)=splice @tests,0,2; 15 warn "\n"; 16 $pat="/$pat/" if substr($pat,0,1) ne '/'; 17 # string eval to get the free regex message in the right place. 18 eval qq[ 19 warn "$str"=~$pat ? "%MATCHED%" : "%FAILED%","\n"; 20 ]; 21 die $@ if $@; 22} 23