什么" $ K2ko {$ D} {$ C} = 1"在perl做什么?

时间:2016-05-19 07:05:49

标签: perl

cat inputfile
A<b>Metabolism</b>
B
B  <b>Overview</b>
C    01200 Carbon metabolism [PATH:ko01200]
D      K00844  HK; hexokinase [EC:2.7.1.1]
D      K12407  GCK; glucokinase [EC:2.7.1.2]
...

open KO,'<',"inputfile" or die $!;
my ($A,$B,$C,$D,$path_DESC,$KO_DESC);
my %K2ko; my %K2DESC; my %ko2desc;
while (<KO>) {
    if (/^A<b>(.+)<\/b>/) {$A=$1;}
    elsif (/^B\s+<b>(.+)<\/b>/) {$B=$1;}
    elsif (/^C\s+\d+\s+(.+)\s+\[PATH:(ko\d+)\]/) {
        $path_DESC=$1;
        $C=$2;
        $ko2desc{$C} = "$A\t$B\t$path_DESC";
    }
    elsif (/^D\s+(K\d+)\s+(.*)/) {
        $D=$1;
        $KO_DESC=$2;
        $K2ko{$D}{$C} = 1;
        $K2DESC{$D} = $KO_DESC;
    }
}
close KO;

有没有人愿意告诉我&#34; $ K2ko {$ D} {$ C} = 1&#34;在perl脚本中做什么?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:3)

这称为hash of hashes,它为您提供多维哈希。这里,“1”是上述散列键的值。

尝试使用Data::Dumper了解数据结构。

use Data::Dumper;
my %K2ko;
my $D = "val1";
my $C = "val2";
$K2ko{$D}{$C} = 1;
print Dumper \%K2ko;

输出

$VAR1 = {
          'val1' => {
                      'val2' => 1
                    }
        };

答案 1 :(得分:2)

使用您的样本数据:

if (/^A<b>(.+)<\/b>/) {$A=$1;}

$A设置为'Metabolism'

elsif (/^B\s+<b>(.+)<\/b>/) {$B=$1;}

$B设置为'Overview'

elsif (/^C\s+\d+\s+(.+)\s+\[PATH:(ko\d+)\]/) {...}

$path_DESC设置为'Carbon metabolism'$C设置为'ko01200'和哈希

$ko2desc{'ko01200'} = "Metabolism\tOverview\tCarbon metabolism"

最后

elsif (/^D\s+(K\d+)\s+(.*)/) {...}

将设置

$D='K12407';
$KO_DESC='GCK; glucokinase [EC:2.7.1.2]';
$K2ko{'K12407'}{'ko01200'} = 1;
$K2DESC{'K12407'} = 'GCK; glucokinase [EC:2.7.1.2]';

$K2ko是散列哈希值,将其设置为1,您可以轻松查看组件K12407的使用位置:

print join ',', keys %{$K2ko{'K12407'}};