0

変数をいくつかのサブに渡すと、常に空になります。どうしてこれなの ?

sub Main {

    my $myVariable = "Test string";
    firstSub($myVariable);
}


sub firstSub {

    my($myVariable) = @_;
    my @array = `some command`;
    secondSub(@array, $myVariable);
}

sub secondSub {

    my(@array, $myVariable) = @_;
    print $myVariable; 
}

エコーはundefになります。

4

4 に答える 4

4

echoは有効なPerl関数ではありません。ここでは、シェルとPerlを混同しています。print" "または" say"(Perl 5.10以降では後者)を試してください。

また、配列とスカラー変数を別の配列とスカラー変数に割り当てることはできません。つまり、右側のすべての要素が左側の配列に割り当てられ、スカラーには何も割り当てられないため、これは機能しません。my (@array, $myVariable) = @_;要素の順序を入れ替えますmy ($myVariable, @array) = @_;(呼び出し時にも関数)または完全な配列の代わりに配列参照を使用します。

于 2012-10-19T07:46:37.373 に答える
2

3つのサブルーチンを定義したため、コードは何もしませんが、それらを呼び出したことはありません。

追加Main();するだけで、メインサブを実際に実行できます。

printまた、エコーの代わりに必要です。

また、Moritz Bunkusが説明したように、変数の受け渡しは正しくありません。

于 2012-10-19T07:49:04.283 に答える
1

secondsub() を呼び出すと、@array と $myVariable がリスト (単一要素) として送信され、secondsub 関数で @array に割り当てられます。@array を secondsub に出力すると、@array と $myVariable の両方の値を確認できます。

配列を参照として渡し、secondsub でスカラー値として受け取る必要があります。以下のコードは機能します。

&Main();
sub Main {

    my $myVariable = "Test string";
    firstSub($myVariable);
}


sub firstSub {

    my($myVariable) = @_;
    my @array = `some command`;
    secondSub(\@array,$myVariable);


}

sub secondSub {

    my($ref,$myVariable) = @_;
   print $myVariable;
}
于 2012-10-19T10:39:36.827 に答える
-1

変数を渡す:

  my $txt = "this text for sample";

Function_Passing_varible($txt);

sub Function_Passing_varible{
                my $text = shift;
                print $text;

}

あなたはこの答えが好きだと思います......

于 2012-10-19T12:00:49.950 に答える