【问题标题】:Perl Hash of hash issuePerl Hash 的哈希问题
【发布时间】:2014-04-09 09:33:21
【问题描述】:

我的哈希看起来像这样:

$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);

我不太擅长算法。所以,觉得很难。 如果我在某个地方出错或者您需要更多信息,请通知我。谢谢。

【问题讨论】:

    标签: algorithm perl hash


    【解决方案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);
    }
    

    【讨论】:

    • 什么是'-|'在 'open my $qbsid, '-|', "$cmd"' 语句中做什么?谢谢。
    • open my $fh, '-|', "$cmd"open my $fh, "$cmd | " 的推荐方式,请查看perldoc -f open 了解更多详情。
    • 它不起作用,因为它们是哈希到哈希引用。但是您只需为单个哈希结构指定它。如果我错了,请纠正我。谢谢。
    • @deep 它适用于您问题中的数据结构。
    猜你喜欢
    • 2020-11-28
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多