2013-06-02 21 views
7

Perl neden aşağıdaki kod parçasına sığdırıyor?"@ARGV || = '.';" Yazarken neyin var?

$ 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. 

o mutlu

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

işlerken ben çok burada yardımcı perldiag açıklama görmüyorum:

% s% s değiştirilemiyor

(F) Belirtilen öğeye atamanıza izin verilmez veya aksi halde otomatik arttırma gibi değiştirmeyi deneyin.


bu davranış için daha çok insan dostu açıklama çok teşekkür ederiz.

+4

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

+0

@mpapec: Teşekkürler meseleyi önüne sermektedir soru – Zaid

cevap

4

@ARGV kodunun hem dizinin kendisini hem de içindeki öğe sayısını döndürmesi imkansızdır, bu nedenle @ARGV ||= '.'; hiçbir anlam ifade etmez. @ARGV'u bir kez skaler bağlamda (eleman sayısını elde etmek için) ve bir kez bir değer olarak (dizinin kendisini elde etmek için) değerlendirmelisiniz.

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

Mükemmel cevap bulmak için. Teşekkürler ikegami – Zaid