2013-06-02 49 views
7

爲什麼Perl會在下面的代碼片段中引用適配器?寫「@ARGV || ='。';」?有什麼不對?

$ perl -Mstrict -wE '@ARGV ||= ".";' 
Can't modify array dereference in logical or assignment (||=) at -e line 1, near "'.';" 
Execution of -e aborted due to compilation errors. 

雖然愉快地處理

$ perl -Mstrict -wE '@ARGV = @ARGV || ".";' 

我沒有看到perldiag解釋幫助在這裏了:

不能在%s修改%S

(F)您不能分配給所指示的項目,否則嘗試對其進行更改,例如使用自動遞增。


這種行爲更人性化的解釋是大加讚賞。

+4

http://stackoverflow.com/questions/4385998/why-doesnt-work-with-arrays –

+0

@mpapec:尋找問題 – Zaid

回答

4

代碼@ARGV不可能返回數組本身以及其中的元素數,因此@ARGV ||= '.';是沒有意義的。您需要評估@ARGV兩次,一次在標量上下文(獲取元素數量),一次作爲左值(獲取數組本身)。

@ARGV = @ARGV || '.'; 
+0

優秀的答案,使問題清澈的感謝。謝謝ikegami – Zaid