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它适用于您问题中的数据结构。