String 如何匹配两个文件中的字符串

String 如何匹配两个文件中的字符串,string,perl,match,two-columns,String,Perl,Match,Two Columns,编译此Perl代码时,我总是在finalhash.pl第27行第7行“使用未初始化值$”打印时遇到此错误。但是我的示例文件没有第7行 如果第一列中的字符串与file1.txt第二列中的字符串匹配,我想打印出file2.txt的整行 列之间用分号分隔 这段代码是根据我之前发布的一个问题的另一个答案改编的(多亏了Borodin)。有人能告诉我为什么在第一个while循环中,第二列的值为1:“$wanted{$fields[1]}=1;” 使用严格; 使用警告; 使用自动模具; 我的$fh; 我的%想

编译此Perl代码时,我总是在finalhash.pl第27行第7行“使用未初始化值$”打印时遇到此错误。但是我的示例文件没有第7行

如果第一列中的字符串与file1.txt第二列中的字符串匹配,我想打印出file2.txt的整行

列之间用分号分隔

这段代码是根据我之前发布的一个问题的另一个答案改编的(多亏了Borodin)。有人能告诉我为什么在第一个while循环中,第二列的值为1:
“$wanted{$fields[1]}=1;”

使用严格;
使用警告;
使用自动模具;
我的$fh;
我的%想要;

打开$fh,“
open$fh”,如果需要,{$fields[0]},请尝试
print$line用于第27行。谢谢这对我帮助很大,但为什么我总是会出现这样的错误:“在script.pl第15行,第..行的哈希元素中使用未初始化的值$fields[1]”?如果拆分一行时没有分号,就会出现这种情况
@fields
将只有一个元素,因此,
$fields[1]
将是未定义的,因为它指向第二个元素。您好,如何避免此错误?在尝试访问第二个元素之前,请检查以确保
@fields
的长度为2或更长
if($#fields>1){$wanted{$fields[1]}=1;}
非常感谢您,但是为什么我总是会在未找到匹配模式的所有行上出现错误:“在script.pl第15行的hash元素中使用未初始化的值$fields[1]”?我能做些什么来消除这个错误,因为很明显,代码适用于一小部分数据,4行的测试数据(当没有找到匹配模式时也有错误,但有输出),但是当我将代码应用于更大的数据集时,没有输出,只有很多行的相同错误。
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;
open $fh, '<', 'file1.txt';
#chomp $fh;
while (my $line = <$fh>) {
    chomp $line;


open $fh, '<', 'file2.txt';
#chomp $fh;
while (my $line = <$fh>) {