从正则表达式模式匹配中生成哈希 - 错误
Make hash from regex expression patten match -error
我正在从正则表达式中生成散列。我 运行 我的程序在下面,我在最后检查我的哈希是否正常。但是我一直收到该值的错误。我得到这个 ARRAY(0x1a1c740),而它应该是 437768。按键可以正常显示。我没有做拆分,因为我需要密钥作为物种名称的第一部分。这是我匹配的。
# "aaaaaaaaaa","aaaaaaaaaa","437768","Cryptophyta sp. CR-MAL06",0
非常感谢您提供的帮助。
use strict;
use warnings;
open (my $in_fh,"$ARGV[0]") or die "Failed to open file: $!\n";
open (my $out_fh, ">genus.txt");
my %hash;
while ( my $line = <$in_fh> ) {
#
# "aaaaaaaaaa","aaaaaaaaaa","437768","Cryptophyta sp. CR-MAL06",0
#
if ($line =~ m/\"+\w+\"+\,+\"+\w+\"+\,+\"+(\d+)\"+\,+\"+(\w+)+.+/) {
my $v = ;
my $k = ;
$hash{$k} = [$v];
}
}
if (exists $hash{'Cryptophyta'}) {
print $out_fh $hash{'Cryptophyta'};
}
else {
print $out_fh "NO\n";
}
close $in_fh;
close $out_fh;
更改此行:
$hash{$k} = [$v];
至
$hash{$k} = $v;
[$v]
是对数组的引用,但您想存储一个标量。
[ ]
创建一个数组,将封闭表达式的结果分配给该数组,并且 returns 对数组的引用。这是您正在打印的参考资料。
您可能试图支持多场比赛。两个问题:
您不断地创建一个包含一个元素的新数组。替换
$hash{$k} = [ $v ];
和
push @{ $hash{$k} }, $v;
您打印了对数组的引用而不是数组的内容。替换
print $out_fh $hash{'Cryptophyta'};
和
print $out_fh join(', ', @{ $hash{'Cryptophyta'} });
我正在从正则表达式中生成散列。我 运行 我的程序在下面,我在最后检查我的哈希是否正常。但是我一直收到该值的错误。我得到这个 ARRAY(0x1a1c740),而它应该是 437768。按键可以正常显示。我没有做拆分,因为我需要密钥作为物种名称的第一部分。这是我匹配的。
# "aaaaaaaaaa","aaaaaaaaaa","437768","Cryptophyta sp. CR-MAL06",0
非常感谢您提供的帮助。
use strict;
use warnings;
open (my $in_fh,"$ARGV[0]") or die "Failed to open file: $!\n";
open (my $out_fh, ">genus.txt");
my %hash;
while ( my $line = <$in_fh> ) {
#
# "aaaaaaaaaa","aaaaaaaaaa","437768","Cryptophyta sp. CR-MAL06",0
#
if ($line =~ m/\"+\w+\"+\,+\"+\w+\"+\,+\"+(\d+)\"+\,+\"+(\w+)+.+/) {
my $v = ;
my $k = ;
$hash{$k} = [$v];
}
}
if (exists $hash{'Cryptophyta'}) {
print $out_fh $hash{'Cryptophyta'};
}
else {
print $out_fh "NO\n";
}
close $in_fh;
close $out_fh;
更改此行:
$hash{$k} = [$v];
至
$hash{$k} = $v;
[$v]
是对数组的引用,但您想存储一个标量。
[ ]
创建一个数组,将封闭表达式的结果分配给该数组,并且 returns 对数组的引用。这是您正在打印的参考资料。
您可能试图支持多场比赛。两个问题:
您不断地创建一个包含一个元素的新数组。替换
$hash{$k} = [ $v ];
和
push @{ $hash{$k} }, $v;
您打印了对数组的引用而不是数组的内容。替换
print $out_fh $hash{'Cryptophyta'};
和
print $out_fh join(', ', @{ $hash{'Cryptophyta'} });