Algorithm 散列问题的Perl散列

Algorithm 散列问题的Perl散列,algorithm,perl,hash,Algorithm,Perl,Hash,我有一个如下所示的散列: $VAR1 = { '638047' => { 'commands' => 'perl nSWIFT/bin/tqtest.pl -var clist=', }, '638049' => { 'commands' => 'perl nSWIFT/bin/tqtest.pl-var clist=',

我有一个如下所示的散列:

$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);
我对算法不是很在行。所以,我觉得很难。 如果我在什么地方出了问题或者你需要更多信息,请通知我。谢谢。

试试这个:

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);
}
my%stat={…};
while(my($qbsid_filename,$qbsid)=每个%stat){
my$cmd=$qbsid->{commands};
下一步,除非$cmd=~m/^perl/;
打开我的$qbs,“>”,“/root/qbsid/$qbsid_文件名”
或死亡“无法打开$qbsid_文件名:$!”;
打开我的$qbscmd、'-|'、“$cmd”
或死亡“无法执行$cmd:$!”;
而(){
打印$qbs$;
}
结束($qbscmd);
收盘价($qbs);
}

在“打开我的$qbsid”、“打开我的$cmd”语句中“-|”做什么?谢谢。
打开我的$fh,'-|',“$cmd”
是建议说
打开我的$fh,“$cmd |”
,请查看
perldoc-f open
了解更多详细信息。它不起作用,因为它们是散列到散列的引用。。但您只需为单个哈希结构指定它。如果我错了,请纠正我。谢谢。@deep它适用于您问题中的数据结构。