2009-07-21 62 views
-1

我在理解子程序語法時遇到了困難。使用如何將參數傳遞給子程序?

以下代碼:

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

在「構建達因文件」的子程序,在散列密鑰的「for循環」迭代,而外部「for循環」中所使用的$ I參數。

我希望你明白這個問題,如果不是的話 - 我會試着更正確地解釋它。

感謝您的任何答案。

+1

您並未提出任何問題。你能更精確嗎? – 2009-07-21 08:53:02

回答

6

你必須收到參數。

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

您在較低的一個lexical範圍for循環(使用my)宣佈它,所以因此只有迴路可以「看到」它。當你把它傳遞給build_dyne_file時,你需要接收參數。

請參閱perlsub

+0

謝謝! 正如我的想法 - PERL是那麼簡單... – YoDar 2009-07-21 10:02:00

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); 
} 
+0

這可能是一個優先選擇的問題,但我非常希望首先在子例程中移動參數(在這種情況下是在打開文件之前,而不是之後)。 – Anon 2009-07-21 19:18:49

相關問題