【发布时间】:2020-02-07 00:52:45
【问题描述】:
我在制表符分隔的 .txt 文件中有一个两列数据集,perl 脚本将其读取为FH,这是以下代码的直接 sn-p:
while(<FH>)
{
chomp;
s/\r//;
/(.+)\t(.+)/;
$uniq_tar{$2}++;
$uniq_mir{$1}++;
push@{$mir_arr{$1}},$2;
push @{$target{$2}} ,$1;
}
当我尝试打印上述 4 个变量中的任何一个时,它表示这些变量未初始化。
而且,当我尝试打印 $uniq_tar{$2}++; 和 $uniq_mir{$1}++;
它只是打印一些我无法理解的数字。
我想知道这部分代码的一般评估是什么?
$uniq_tar{$2}++;
【问题讨论】:
-
对于初学者来说,尝试
/(.+?)\t(.+)/而不是/(.+)\t(.+)/(注意正则表达式中的额外?) -
更好的是,用
my ($c1, $c2) = split /\t/;代替正则表达式,然后用$c1和$c2代替$1和$2(但使用比$c1更好的变量名! ) -
注明。但我仍然无法理解
$uniq_tar{$2}++;这段代码的作用,这就是我所坚持的。 -
似乎是哈希表,存储了 $2 和 $1 中提供的值,并根据 $2 和 $1 重复计数。
-
有一个哈希
%uniq_tar,$uniq_tar{$2}是键的值,它是$2.中的字符串所以每次在$2中捕获相同的字符串时,该值的值散列中的键增加 1 ---$uniq_tar{$2} = $unit_tar{$2} + 1,或者简而言之$uniq_tar{$2}++。这是一个频率计数器。最后,哈希将$2中捕获的所有字符串作为键,它们的值是它们的计数。
标签: perl