2013-06-02 3 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을 수정할 수 없습니다

(F) 표시된 항목에 할당 할 수 없거나 자동 증가와 같이 변경하려고합니다.


이 동작에 대한보다 인간 친화적 인 설명은 많이 감사합니다.

+4

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

+0

@mpapec : 감사 문제를 명료하게 질문 – Zaid

답변

4

코드 @ARGV은 배열 자체와 요소의 수를 모두 반환 할 수 없으므로 @ARGV ||= '.';은 의미가 없습니다. @ARGV을 두 번, 즉 스칼라 컨텍스트 (요소 수를 얻기)에서 한 번, 그리고 lvalue (어레이 자체를 얻기 위해)로 두 번 평가해야합니다.

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

뛰어난 답을 찾는. 고마워요. – Zaid

관련 문제