【问题标题】:What does $variable{$2}++ mean in Perl?$variable{$2}++ 在 Perl 中是什么意思?
【发布时间】: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


【解决方案1】:

while 循环将文件的每一行依次放入 Perl 的特殊变量 $_

/.../ 是匹配运算符。默认情况下,它适用于$_

/(.*)\t(.*)/ 是匹配运算符中的正则表达式。如果正则表达式匹配 $_ 中的内容,则两对括号内的匹配字符串位将存储在 Perl 的特殊变量 $1$2 中。

您有名为%uniq_tar%uniq_mir 的哈希值。您可以使用$hashname{key} 访问散列中的各个元素。因此,$uniq_tar{$1} 正在查找与存储在 $1 中的键相关联的 %uniq_tar 中的值(即 - 第一个选项卡之前的记录部分)。

$variable++ 增加 $variable 中的数字。所以$uniq_tar{$1}++ 增加了我们在上一段中找到的值。

所以,正如 zdim 所说,它是一个频率计数器。您读取文件中的每一行,并在该行的第一个制表符之前和之后提取数据位。然后增加两个散列中的值以计算每个字符串的出现次数。

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 2015-06-25
    • 2011-08-18
    • 1970-01-01
    • 2018-03-05
    • 2010-12-28
    • 1970-01-01
    • 2023-03-25
    • 2014-04-21
    相关资源
    最近更新 更多