2013-06-02 15 views
7

Dlaczego Perl podaje dopasowanie w poniższym fragmencie kodu?Co jest nie tak z pisaniem "@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. 

Choć szczęśliwie przetwarza

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

ja nie widzę perldiag wyjaśnienie pomaga tu wiele:

Nie można modyfikować% s% s

(F) Nie możesz przypisać do wskazanej pozycji lub w inny sposób spróbuj ją zmienić, na przykład z auto-inkrementacją.


Bardziej ludzki w obsłudze wytłumaczenie tego zachowania jest bardzo cenione.

+4

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

+0

@mpapec: Dzięki za znalezienie pytanie – Zaid

Odpowiedz

4

Nie jest możliwe, aby kod @ARGV zwrócił samą tablicę i liczbę elementów w niej, więc @ARGV ||= '.'; nie ma sensu. Musisz ocenić dwa razy: @ARGV, raz w kontekście skalarnym (aby uzyskać liczbę elementów) i raz jako l-wartość (aby uzyskać samą tablicę).

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

Doskonała odpowiedź, która czyni z tej kwestii krystalicznie czysta. Dzięki ikegami – Zaid