我有一堆我需要做的匹配,除了要读取的文件的名称和
regexp本身之外,它们都使用相同的代码.因此,我想将匹配转换为只接受文件名和regexp作为字符串的过程.但是,当我使用变量尝试匹配时,特殊的捕获变量停止被设置.
$line =~ /(\d+)\s(\d+)\s/;
$regexp = "/(\d+)\s(\d+)\s/"; $line =~ /$regexp/;
我有什么想法可以解决这个问题吗?
谢谢,
贾里德
解决方法
引用你的正则表达式字符串usin qr:
my $regex = qr/(\d+)\s(\d+)\s/; my $file =q!/path/to/file!; foo($file,$regex);
然后在子:
sub foo { my $file = shift; my $regex = shift; open my $fh,'<',$file or die "can't open '$file' for reading: $!"; while (my $line=<$fh>) { if ($line =~ $regex) { # do stuff } }