2013-05-13 60 views
0

我試圖將引用傳遞給數組,並將字符串傳遞給表單中的函數;將引用和字符串傳遞給子例程

&function2(\g_array, "String"); 

在我的子程序我要尊重數組,所以我可以評價/打印,但是當我嘗試這樣做,它抱怨說,我不能同時使用嚴格的字符串映射到一個數組。什麼是最好的方法來做到這一點?

+0

如果您在下面的評論中說過,您實際上使用'\ @ g_array'而不是'\ g_array'調用子例程,那麼問題將出現在您嘗試使用參數的子例程中。沒有看到這些代碼,我們很難看到我們如何提供幫助。 – 2013-05-14 12:12:25

+3

哦,如果你從一個告訴你使用'&'來調用子程序的源程序學習,那麼你的源程序是相當可疑的(或者至少是可怕的過時)。 – 2013-05-14 12:13:30

回答

3

您在當前範圍內忘記了use strict。它會警告你:bareword "g_array" not allowed

如果g_array是一個函數,那麼\g_array解析爲\(g_array())。如果不是,則解析爲\"g_array"。所以你實際上是傳遞一個字符串的引用。

你想要傳遞一個arrayref?只是包括在變量中@印記:

function2(\@g_array, "String"); 
+0

這些片段是我與 有關的部分if(&function2(\ @ g_array,「Just a String!」)!= 0){ print「找不到'$ g_search'的值, 「\ n」 個; sub function2 my($ l_array,$ variable_two)= map @ $ _,$ _ [1]; – user2361820 2013-05-13 21:53:09

+1

@ user2361820該代碼無法完成。請[編輯](http://stackoverflow.com/posts/16531658/edit)你的問題,包括你使用的實際代碼。 – amon 2013-05-13 22:05:02

3

如果您使用strict,你應該總是這樣,你會看到這樣的錯誤:

Bareword "g_array" not allowed while "strict subs" in use

這也就意味着:g_array,無sigil,是一個「空話」。沒有束縛打開,barewords只是成爲字符串。 (假設它們不是函數的名稱)。你所做的是參考字符串"g_array"

要參考數組,請使用\@g_array

此外,通常沒有理由在函數名稱前面使用&,除非您知道爲什麼應該這樣做。

+0

對不起,我只是輸入了,我把它當作\ @ g_array。我將在下面添加我的實際代碼 – user2361820 2013-05-13 21:48:48