我有哈希看起来像这样:
$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);
我对算法不是很了解。所以,发现它很困难。 如果我在某个地方出错或者您需要更多信息,请通知我。感谢。
答案 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);
}