哈希问题的Perl Hash

时间:2014-04-05 01:33:55

标签: algorithm perl hash

我有哈希看起来像这样:

$VAR1 = {
      '638047' => {
                    'commands' => 'perl nSWIFT/bin/tqtest.pl -var clist=',
                  },
      '638049' => {
                    'commands' => 'perl nSWIFT/bin/tqtest.pl-var clist=',
                  }
};

我想创建一个目录,使文件名以哈希值开头,并存储通过运行perl nswift/bin/tqtest.pl -var clist=给出的命令生成的数字。这些数字应与其密钥存储在同一文件中。例如:

'638047' -> '638050' and  '638049' -> '638051' 

然后应该相应地存储。

它已经尝试了但没有到达那里。

my %stat
my @qbsid_filename = keys %stat;
foreach (@qbsid_filename){
    open QBS, ">/root/qbsid/$_";
}
my $newqbsid, @files;
opendir (DIREC, '/root/qbsid') or die $!;
foreach my $qbsid ( keys %stat){
    my $cmd = $stat{$qbsid}->{commands};
    if ($cmd =~ m/perl(.*)/){
            $ex_cmd = $1;
    }
    $newqbsid = qx | perl $ex_cmd|;
}
close (DIREC);

我对算法不是很了解。所以,发现它很困难。 如果我在某个地方出错或者您需要更多信息,请通知我。感谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

my %stat = { ... };

while (my ($qbsid_filename, $qbsid) = each %stat) {
    my $cmd = $qbsid->{commands};
    next unless $cmd =~ m/^perl/;

    open my $qbs, '>', "/root/qbsid/$qbsid_filename"
        or die "Cannot open $qbsid_filename: $!";

    open my $qbscmd, '-|', "$cmd"
        or die "Cannot execute $cmd: $!";
    while (<$qbscmd>) {
        print $qbs $_;
    }

    close ($qbscmd);
    close ($qbs);
}