2012-10-19 164 views
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; 
} 

echo將被undef。

+0

'echo'沒有perl的功能。一定要在腳本中加上'嚴格使用'和'使用警告'。 – dgw

+0

你爲什麼要通過添加'@ array'來編輯代碼?你的第一個代碼正確地將變量傳遞給函數。現在,您在解決原始問題後添加了另一個問題,從而使問題變得混亂。 – dan1111

回答

4

echo不是一個有效的Perl函數。這裏讓你把Perl和Perl混淆了。嘗試使用「print」或「say」(後者使用Perl 5.10或更高版本)。

另外,您不能將標量變量分配給另一個數組&標量變量。這意味着這將不起作用,因爲右側的所有元素都將被分配到左側的數組中,並且沒有任何內容會被分配給標量:my (@array, $myVariable) = @_;交換元素的順序my ($myVariable, @array) = @_;(同時調用函數)或使用數組引用而不是完整數組。

+0

是的,我很抱歉,我剛纔用手寫了一個例子。我在我的代碼中使用打印。 – user1758367

+0

啊哈!我會試試看,非常感謝! – user1758367

+0

作品!我必須等4分鐘才能接受你的答案。謝謝! – user1758367

2

您的代碼不會執行任何操作,因爲您定義了三個子例程,但您從未調用過它們。

只需添加Main();實際運行您的主要子。

此外,您需要print而不是回聲。如Moritz Bunkus解釋的那樣,變量的傳遞也是不正確的。

+0

這只是我寫下的一個例子。我的代碼中有Main()函數。這運行良好;如果我將print $ myVariable更改爲打印「某些文本」,它會顯示出來。 – user1758367

+1

@ user1758367,這是從您發佈的示例代碼中不清楚。原始代碼沒有任何錯誤,除了沒有調用'Main'並且使用echo而不是'print'。我認爲你一定沒有調用過Main,否則你會得到一個錯誤,認爲echo不是一個函數(這個問題現在已經被你的問題編輯困惑了)。故事的寓意是,始終在問題中發佈一個完整的代碼示例,並且在發佈之前始終測試自己的示例。 – dan1111

1

當您調用secondsub()時,@array和$ myVariable作爲列表(單個元素)發送,並且已在secondsub函數中分配給@array。當您在secondsub中打印@array時,您可以看到@array和$ myVariable值。

您必須傳遞數組作爲參考,並以秒爲單位接收它作爲標量值。下面的代碼將工作。

&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; 
} 
-1

傳遞可變因素:

my $txt = "this text for sample"; 

Function_Passing_varible($txt); 

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

} 

我覺得你喜歡這個答案......

+0

你應該稍微解釋一下。 – albertjan