2010-02-26 92 views

回答

25

如果你想連接的參數,使用在"."運營商或join

my $err = $soap_response->code. " ". $soap_response->string. "\n"; 
my $err = join '', $soap_response->code, " ", $soap_response->string, "\n"; 

接下來就是Perl的給你警告。

您將分配給標量變量$err,並且分配的右側將在標量上下文中進行評估。

二進制「,」是逗號運算符。在標量上下文中,它在無效上下文中評估其左側參數,將該值拋出,然後在標量上下文中評估其正確參數並返回該值。

評估一個變量或一個常量並拋棄該值是沒用的。並且perl警告您這一點。

供參考:另一個可能的問題與您的代碼:

my $err = $soap_response->code, " ", $soap_response->string, "\n"; 

的分配具有更高的優先級,以便爲:

(my $err = $soap_response->code), " ", $soap_response->string, "\n"; 

Perl operators and precedenceComma operator以獲取更多信息。

+2

很棒的回答。但是「正確的論點」有點模棱兩可。它分配錯誤的值,而不是正確的:)。也許試試'最右'或'最後'或'最後'等等。 – daotoad 2010-02-26 16:17:35

+1

如果提到連接運算符爲「這就是你的意思」,我真的很喜歡這個答案。 – darch 2010-02-26 20:04:22

+1

這是對錯誤的更好解釋,但codaddict有更好的解決方案。 '加入'只是在這裏矯枉過正。他真正想要的是連接運算符'.'。 – cjm 2010-02-26 22:24:44

16

我想你想將字符串連接件形成整個錯誤信息,所以你必須使用點而不是逗號:

my $err = $soap_response->code. " ". $soap_response->string. "\n"; 
+0

''$$ soap_response {code} $$ soap_response {string} \ n「' – ephemient 2010-02-26 18:40:09

+3

@ephemient:這與原始代碼並不完全相同。方法調用不是哈希查找(即使該方法只是執行哈希查找,它可能會在將來改變)。 – cjm 2010-02-26 19:39:19

+0

@cjm這些不是方法調用,請親自嘗試。 '$$ _ {key}'是'$ {$ _} {key}'是'$ _-> {key}',除了後者是插入字符串的更多工作。 'perl -e'$ _ = {key => 1};打印$$ _ {key},$ {$ _} {key},$ _-> {key}'== == 111 – ephemient 2010-02-26 20:38:21

相關問題