2009-07-21 14 views
-1

Ich habe Schwierigkeiten beim Verständnis der Subroutinensyntax.Wie übergebe ich Parameter an ein Unterprogramm?

mit dem folgenden Code:

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

In 'build dyne Datei' Subroutine der 'for-Schleife' iteriert über den Hash-Schlüssel, während die $ i Parameter innerhalb der externen 'for-Schleife' verwendet.

Ich hoffe, Sie verstehen das Problem, wenn nicht - ich werde versuchen, es richtiger zu erklären.

danke für jede antwort.

+1

Sie stellen keine Frage. kannst du präziser sein? –

Antwort

6

Sie müssen erhalten die Parameter.

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

Sie erklärt es mit einem lexical Umfang im unteren for-Schleife (mit my), so deshalb nur, dass Schleife sie „sehen“ kann. Wenn Sie es an build_dyne_file übergeben, müssen Sie den Parameter erhalten.

Bitte beachten Sie perlsub

+0

Danke! Wie ich dachte - PERL ist so einfach ... – YoDar

+0

Das ist "perl", nicht "PERL". Es ist kein Akronym. – Ether

+1

Wenn Sie sich auf die Sprache beziehen, verwenden Sie bitte "Perl". – Inshallah

1

Sie müssen die $i Parameter in dem Unterprogramm erhalten:

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

Dies mag eine Frage der Präferenz sein, aber ich ziehe es vor, die Argumente zuerst in einer Subroutine zu verschieben (in diesem Fall vor, nicht nach dem Öffnen der Datei). – Anon

Verwandte Themen