如何解決「在無效環境中無用的變量」這種情況?如何解決「在無效環境中無用的變量」這種情況?
例如:
my $err = $soap_response->code, " ", $soap_response->string, "\n";
return $err;
我得到「在無效的情況下沒用使用一個變量的」警告?爲什麼?我該如何解決它?
如何解決「在無效環境中無用的變量」這種情況?如何解決「在無效環境中無用的變量」這種情況?
例如:
my $err = $soap_response->code, " ", $soap_response->string, "\n";
return $err;
我得到「在無效的情況下沒用使用一個變量的」警告?爲什麼?我該如何解決它?
如果你想連接的參數,使用在"."
運營商或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";
我想你想將字符串連接件形成整個錯誤信息,所以你必須使用點而不是逗號:
my $err = $soap_response->code. " ". $soap_response->string. "\n";
''$$ soap_response {code} $$ soap_response {string} \ n「' – ephemient 2010-02-26 18:40:09
@ephemient:這與原始代碼並不完全相同。方法調用不是哈希查找(即使該方法只是執行哈希查找,它可能會在將來改變)。 – cjm 2010-02-26 19:39:19
@cjm這些不是方法調用,請親自嘗試。 '$$ _ {key}'是'$ {$ _} {key}'是'$ _-> {key}',除了後者是插入字符串的更多工作。 'perl -e'$ _ = {key => 1};打印$$ _ {key},$ {$ _} {key},$ _-> {key}'== == 111 – ephemient 2010-02-26 20:38:21
my $err = join(' ', $soap_response->code, $soap_response->string) . "\n";
,或者更好IMO:
return sprintf "%s %s\n", $soap_response->code, $soap_response->string;
爲sprintf版本+1,這是做這個IMO的正確方法。 – RET 2010-09-14 04:54:13
很棒的回答。但是「正確的論點」有點模棱兩可。它分配錯誤的值,而不是正確的:)。也許試試'最右'或'最後'或'最後'等等。 – daotoad 2010-02-26 16:17:35
如果提到連接運算符爲「這就是你的意思」,我真的很喜歡這個答案。 – darch 2010-02-26 20:04:22
這是對錯誤的更好解釋,但codaddict有更好的解決方案。 '加入'只是在這裏矯枉過正。他真正想要的是連接運算符'.'。 – cjm 2010-02-26 22:24:44