2014-04-05 167 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