我提供了一些变量并尝试使用它们来匹配输入,但是我在匹配我想匹配的方面遇到了问题。
my $x = 1.0;
foreach ( @data ) { # see sample data below
my $input = $_; # I know, I know...
if ( $input =~ m/ph${x}/ ) {
print "$input \n";
}
}
info.ph1.0.dat_0
info.ph1.5.dat_1
info.ph2.0.dat_2
info.ph1.0.dat_0
info.ph1.5.dat_1
info.ph1.0.dat_0
$x
总是类似1.0
,1.1
,1.2
等。
答案 0 :(得分:2)
您有两个问题:
1.0
引用为Nullman pointed out $x
内正确quote any metacharacters。例如,您是否希望info.ph1x0.dat_0
或info.ph1*0.dat_0
也匹配?好吧,他们会,因为1.0
中未转义的点匹配任何角色。修订代码:
use strict;
use warnings;
use 5.010;
my $x = '1.0';
while (<DATA>) {
if (/ph\Q$x/) {
say;
}
}
__DATA__
info.ph1.0.dat_0
info.ph1.5.dat_1
info.ph2.0.dat_2
info.ph1x0.dat_0
info.ph1*0.dat_0
输出:
info.ph1.0.dat_0
答案 1 :(得分:0)
可能这一点:
my $x = 1.0;
应该是
my $x = '1.0';
这是因为perl将1.0
保存为1