我收到以下警告:
"在串联(.)中使用未初始化的值或在C:\ tools\test.pl第17行,DATA行1使用字符串."
但下一行将在__DATA__没有任何警告的情况下处理并得到以下信息:
test1b.txt:test test1c.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
Run Code Online (Sandbox Code Playgroud)
rua*_*akh 10
Perl认为$&,$'并且$`价格昂贵,所以它实际上不会在不使用它们的程序中填充它们.从perlvar联机帮助页:
$&在程序中的任何位置使用此变量[ ]会对所有正则表达式匹配造成相当大的性能损失.为避免这种损失,您可以使用提取相同的子字符串@-.从Perl 5.10开始,您可以使用/p匹配标志和${^MATCH}变量为特定匹配操作执行相同的操作.
但是,当您只在传递给它的字符串中使用它们时eval,Perl无法告诉您正在使用它们,因此它不会填充它们,因此它们将是未定义的.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |