我正在從正則表達式進行散列。我在下面運行我的程序,並在最後查看我的散列是否正常。但是我不斷收到一個錯誤值,我得到這個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 = $1;
my $k = $2;
$hash{$k} = [$v];
}
}
if (exists $hash{'Cryptophyta'}) {
print $out_fh $hash{'Cryptophyta'};
}
else {
print $out_fh "NO\n";
}
close $in_fh;
close $out_fh;
你的正則表達式會更便於管理,如果你第一個'split'您的數據到字段,然後只用在你感興趣的領域的正則表達式。如果你的字段可以包含逗號,使用['Text :: CSV'](https://metacpan.org/pod/Text::CSV)而不是'split'。 – ThisSuitIsBlackNot 2015-04-01 14:36:21