2013-06-02 33 views
7

Tại sao Perl ném phù hợp với đoạn mã sau?Có gì sai khi viết "@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. 

Trong khi nó hạnh phúc quá trình

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

Tôi không thấy perldiag giải thích giúp ở đây nhiều:

Không thể sửa đổi% s trong% s

(F) Bạn không được phép gán cho mục được chỉ định, hoặc nếu không cố gắng thay đổi nó, chẳng hạn như với tự động tăng.


Một lời giải thích con người thân thiện hơn đối với hành vi này được nhiều đánh giá cao.

+4

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

+0

@mpapec: Cảm ơn cho việc tìm kiếm câu trả lời xuất sắc câu hỏi – Zaid

Trả lời

4

Không thể mã @ARGV để trả lại cả mảng và số lượng phần tử trong đó, vì vậy @ARGV ||= '.'; không có ý nghĩa. Bạn cần phải đánh giá @ARGV hai lần, một lần trong ngữ cảnh vô hướng (để có được số lượng các phần tử), và một lần như một giá trị (để có được bản thân mảng).

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

mà làm cho vấn đề này trong trẻo. Cảm ơn ikegami – Zaid

Các vấn đề liên quan