Как передать параметры в подпрограмму? - PullRequest
0 голосов
/ 21 июля 2009

Я столкнулся с трудностью в понимании синтаксиса подпрограммы.

используя следующий код:

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 ]

6 голосов
/ 21 июля 2009

Вы должны получить параметр.

sub build_dyne_file { 
    my $i = shift; # take it off the parameter queue
    ...

Вы объявили это с помощью лексической области видимости в нижнем цикле for (используя my), поэтому «видеть» его может только этот цикл. Когда вы передаете его в build_dyne_file, вам нужно получить параметр.

см. perlsub

1 голос
/ 21 июля 2009

Вам нужно получить параметр $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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...