我在理解子程序语法方面遇到了困难。
使用以下代码:
sub build_dyne_file{
open(DYNAP, "+>$veri_dir/$dyna_para") or die $!;
for (keys %hash){
print DYNAP "#define ",$_," ",$hash{$_}->[$i],"\n";
}
close(DYNAP);
}
for (my $i = 0 ; $i <$TEST_QUOTA ; $i++){
build_dyna_file($i);
}
在'build dyne file'子例程中,'for循环'遍历散列键,而$ i参数在外部'for循环'中使用。
我希望你能理解这个问题,如果没有 - 我会试着更恰当地解释它。
感谢您的回答。
答案 0 :(得分:6)
您必须接收参数。
sub build_dyne_file {
my $i = shift; # take it off the parameter queue
...
您在较低的for循环(使用my
)中使用 lexical 范围声明了它,因此只有该循环才能“看到”它。将其传递给build_dyne_file
时,您需要接收参数。
请参阅perlsub
答案 1 :(得分:1)
您需要在子例程中获取$i
参数:
sub build_dyne_file
{
open(DYNAP, "+>$veri_dir/$dyna_para") or die $!;
# the crucial omission...
my $i = shift;
for (keys %hash){
print DYNAP "#define ",$_," ",$hash{$_}->[$i],"\n";
}
close(DYNAP);
}