perl中的奇怪事情';s值函数
我得到以下警告: 在数据行1的C:\tools\test.pl第17行的串联(.)或字符串中使用未初始化的值 但是下一行的perl中的奇怪事情';s值函数,perl,Perl,我得到以下警告: 在数据行1的C:\tools\test.pl第17行的串联(.)或字符串中使用未初始化的值 但是下一行的\uuuuu数据将在没有任何警告的情况下进行处理,并获得以下信息: test1b.txt:testtest1c.txt:test:test 更奇怪的是,当我添加一行时:print“$line:.$”。“\n”警告消失了 有人有线索吗 #!/usr/bin/perl -w use strict; my $pattern='test'; my $output='$&';
\uuuuu数据将在没有任何警告的情况下进行处理,并获得以下信息:
test1b.txt:testtest1c.txt:test:test
更奇怪的是,当我添加一行时:print“$line:.$”。“\n”代码>警告消失了
有人有线索吗
#!/usr/bin/perl -w
use strict;
my $pattern='test';
my $output='$&';
while(<DATA>)
{
chomp;
my $line=$_;
chomp($line);
$line=~/$pattern/;
#print "$line:".$&."\n"; #why uncommenting this line make the following line pass without no warning.
my $result="$line:".eval($output)."\n";
print $result;
}
__DATA__
test1a.txt
test1b.txt
test1c.txt
#/usr/bin/perl-w
严格使用;
我的$pattern='test';
我的$output='$&';
while()
{
咀嚼;
我的$line=$\ux;
chomp($line);
$line=~/$pattern/;
#打印“$line:.$&.\n”#为什么取消注释这一行会使下一行在没有警告的情况下通过。
my$result=“$行:”.eval($output)。“\n”;
打印$result;
}
__资料__
test1a.txt
test1b.txt
test1c.txt
Perl认为$&
、$'
和$`
非常昂贵,因此它不会在不使用它们的程序中实际填充它们。从perlvar
手册页:
在程序中的任何地方使用此变量[$&
]都会造成相当大的影响
所有正则表达式匹配的性能损失。为了避免这种情况
惩罚,您可以使用@-
提取相同的子字符串。启动
在Perl5.10中,您可以使用/p
匹配标志和${^match}
变量对特定的匹配操作执行相同的操作
但是,当您只在传递给eval
的字符串中使用它们时,Perl无法判断您正在使用它们,因此它不会填充它们,因此它们将是未定义的。这一点很好!我很少用“eval”。一些链接提供了有关其用法的更多概念,例如。