2014-04-05 165 views
0

我有散,看起来像这样:Perl的哈希

$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

试试这个:

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); 
} 
+0

什么是 ' - |'在'打开我的$ qbsid',' - ','$ cmd''语句?谢谢。 – deep

+0

'open my $ fh,' - |',“$ cmd”'是推荐'打开我的$ fh'的方法,$ cmd |“',请查看'perldoc -f open'获取更多详细信息。 –

+0

它不工作,因为它们是哈希引用散列。但是你只是指定它为一个单一的哈希结构。如果我错了,请纠正我。谢谢。 – deep