如何将参数传递给子程序?

时间:2009-07-21 08:47:38

标签: perl syntax

我在理解子程序语法方面遇到了困难。

使用以下代码:

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循环'中使用。

我希望你能理解这个问题,如果没有 - 我会试着更恰当地解释它。

感谢您的回答。

2 个答案:

答案 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);
}