我試圖將引用傳遞給數組,並將字符串傳遞給表單中的函數;將引用和字符串傳遞給子例程
&function2(\g_array, "String");
在我的子程序我要尊重數組,所以我可以評價/打印,但是當我嘗試這樣做,它抱怨說,我不能同時使用嚴格的字符串映射到一個數組。什麼是最好的方法來做到這一點?
我試圖將引用傳遞給數組,並將字符串傳遞給表單中的函數;將引用和字符串傳遞給子例程
&function2(\g_array, "String");
在我的子程序我要尊重數組,所以我可以評價/打印,但是當我嘗試這樣做,它抱怨說,我不能同時使用嚴格的字符串映射到一個數組。什麼是最好的方法來做到這一點?
您在當前範圍內忘記了use strict
。它會警告你:bareword "g_array" not allowed
。
如果g_array
是一個函數,那麼\g_array
解析爲\(g_array())
。如果不是,則解析爲\"g_array"
。所以你實際上是傳遞一個字符串的引用。
你想要傳遞一個arrayref?只是包括在變量中@
印記:
function2(\@g_array, "String");
這些片段是我與 有關的部分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
@ user2361820該代碼無法完成。請[編輯](http://stackoverflow.com/posts/16531658/edit)你的問題,包括你使用的實際代碼。 – amon 2013-05-13 22:05:02
如果您使用strict
,你應該總是這樣,你會看到這樣的錯誤:
Bareword "g_array" not allowed while "strict subs" in use
這也就意味着:g_array
,無sigil,是一個「空話」。沒有束縛打開,barewords只是成爲字符串。 (假設它們不是函數的名稱)。你所做的是參考字符串"g_array"
。
要參考數組,請使用\@g_array
。
此外,通常沒有理由在函數名稱前面使用&
,除非您知道爲什麼應該這樣做。
對不起,我只是輸入了,我把它當作\ @ g_array。我將在下面添加我的實際代碼 – user2361820 2013-05-13 21:48:48
如果您在下面的評論中說過,您實際上使用'\ @ g_array'而不是'\ g_array'調用子例程,那麼問題將出現在您嘗試使用參數的子例程中。沒有看到這些代碼,我們很難看到我們如何提供幫助。 – 2013-05-14 12:12:25
哦,如果你從一個告訴你使用'&'來調用子程序的源程序學習,那麼你的源程序是相當可疑的(或者至少是可怕的過時)。 – 2013-05-14 12:13:30