【发布时间】:2015-04-01 14:34:09
【问题描述】:
我正在从正则表达式进行哈希。我在下面运行我的程序,最后我检查一下我的哈希是否正常。但是我一直收到该值的错误。我得到了这个 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而不是split。
标签: regex perl hash pattern-matching