$a,$b,$c = 1,2,3;
print "$a, $b, $c\n";
, , 1
그래서 = (같음) 않습니다
는 튜플 건설보다 우선?$a,$b,$c = 1,2,3;
print "$a, $b, $c\n";
, , 1
그래서 = (같음) 않습니다
는 튜플 건설보다 우선?예. perlop에는 precedence table이 있습니다. 할당 연산자는 19 레벨이고 쉼표는 20 레벨입니다. 일반적으로 Perl의 연산자는 해당 C 연산자와 우선 순위가 같습니다 (해당 C 연산자가있는 연산자의 경우).
($a,$b,$c) = (1,2,3);
을 의미하는 경우 괄호를 사용해야합니다.
(스칼라 컨텍스트에서 사용한) 쉼표 연산자는 여러 개의 표현식을 평가하고 마지막 표현식을 반환하기위한 튜플 구성을위한 것이 아닙니다.
Perl은 상황에 따라 다르게 처리하며, 스칼라 값, 목록, 아무 것도 기대하지 않을 경우 수행 할 작업을 결정합니다. 소개는 perldoc perldata
's section on Context을 참조하십시오.
그래서, 당신이 할 경우 : 4,2,0
은 스칼라 문맥에서 평가되기 때문에
perl -e '$a = (1 and 4,2,0); print"$a\n"'
당신은 0
을 얻고, 쉼표와 마지막의 결과를 리턴하는 표현식을 평가, C의 콤마 연산자처럼 동작합니다. 배열 세력 목록 컨텍스트에 할당 (추가 괄호하는 우선 순위의 문제 CJM 언급이 해결할 수있다) 때문에
perl -e '$a = (1 and @a=(4,2,0)); print"$a\n"'
당신은, 3
을 얻고, :
당신이 4,2,0
을 강제하는 경우
and
의 RHS가 됨으로써 강제되는) 스칼라 컨텍스트의 목록 값은 해당 요소의 개수입니다 (Perl의 논리
and
은 다른 프로그래밍 언어 에서처럼 부울 값 대신 평가 된 마지막 표현식을 반환합니다) . CJM 말했듯이
그래서, 당신은 할 필요가 :
($a,$b,$c) = (1,2,3);
이 우선 힘리스트 문맥을 처리 할 수 있습니다.
공지 간의 차이 : 콤마 연산자 스칼라 문맥에서 평가
$ perl -e '$a,$b,$c = (7,6,8); print "$a $b $c\n"'
8
, 반환 제
$ perl -e '($a,$b,$c) = (7,6,8); print "$a $b $c\n"'
7 6 8
콤마 연산자는리스트 문맥에서 평가하고, 목록을 반환한다.
$ perl -e '$a,$b,$c =() = (7,6,8); print "$a $b $c\n"'
3
콤마 연산자는 목록을 반환리스트 문맥에서 평가되고, 그리스트의 소자의 수를 반환 $c
힘 스칼라 콘텍스트에 할당.