我制作了一个程序,用于过滤掉包含文本文件中值的行...我收到此错误
在lol.pl第13行的哈希元素中使用未初始化的值$ col2, 第1行。
use strict;
use warnings;
my %keys;
open( my $f1, '<', 'jump.txt' ) or die("Cannot open jump.txt: $!");
while (<$f1>) {
chomp;
$keys{$_} = 1;
}
close($f1);
open( my $f2, '<', 'sym.txt' ) or die("Cannot open sym.txt: $!");
while (<$f2>) {
my ( undef, $col2, undef ) = split( ' ', $_ );
print if ( $keys{$col2} );
}
close($f2);
jump.txt:
a
b
c
sym.txt:
a 1
b 2
c 3
d 4
e 5
期望的输出:
a 1
b 2
c 3
答案 0 :(得分:0)
当您使用warnings
时(如您所愿),当您尝试使用未初始化的变量时,会收到警告:
perl -wE 'my $x; say $x'
输出:
Use of uninitialized value $x in say at -e line 1.
在列表赋值中,会忽略额外的值,如果变量太多,则额外值会得到值undef
。
perl -wE 'my ($x, $y) = (2); say $y'
输出:
Use of uninitialized value $y in say at -e line 1.
在您的情况下,问题可能出在这一行:
my(undef, $col2, undef) = split(' ', $_);
如果split
仅返回单个项目(或零项目),则$col2
将不确定。
另见perldata
修改强>
要获得所需的输出(似乎您需要$col1
而不是$col2
):
my $col1 = (split(' ', $_))[0];
print if $keys{$col1};