编译此Perl代码时,我总是收到此错误"Use of uninitialized value $_ in print at finalhash.pl line 27, <$_[...]> line 7"
。但我的示例文件没有第7行。
如果第一列中的字符串与file1.txt第二列中的字符串匹配,我想打印出整行的file2.txt行。
列用分号分隔。
此代码改编自我之前发布的问题的另一个答案(感谢Borodin)。有人能告诉我为什么在第一个while循环中第二列被赋予值1:"$wanted{$fields[1]} = 1;"
?
use strict;
use warnings;
use autodie;
my $fh;
my %wanted;
open $fh, '<', 'file1.txt';
chomp $fh;
while (my $line = <$fh>) {
my @fields = split(';', $line);
$wanted{$fields[1]} = 1;
}
open $fh, '<', 'file2.txt';
chomp $fh;
while (my $line = <$fh>) {
my @fields = split(';', $line);
print if $wanted{$fields[0]}; #line 27 with the error
}
close $fh;
答案 0 :(得分:1)
open $fh, '<', 'file1.txt';
#chomp $fh;
while (my $line = <$fh>) {
chomp $line;
open $fh, '<', 'file2.txt';
#chomp $fh;
while (my $line = <$fh>) {
通过这些更改,您的脚本应该可以正常运行。在第一个文件阅读中,你没有“扼杀”。 $线。 chomp $ fh毫无意义 - 什么都不做。
无需删除文件2中的换行符,因为您只是稍后将其打印出来。
更新:Matt在上面的评论中遇到了问题。打印$ line if ...