foreach(1..10)
('A' .. 'Z')
@z2 = ('01' .. '31')
..
와 ...
의 차이:
..
를 사용할 경우, 좌변이 참이 되어 연산자 상태가 참이 되는 그 시점에 우변도 검사한다. 즉 참이 되자마자 곧바로 다시 거짓이 될 수도 있다 (이 때 반환하는 건 참이다. 즉 한 번은 참을 반환한다.)
...
를 사용할 경우는 연산자가 참이 되는 시점에서는 우변은 검사하지 않고, 그 다음 검사부터 우변을 검사한다.
$.
" 변수가 그 상수식과 같은지(==
)를 검사한다.
# 좌변은 n이 3일때, 8일때 참 sub left { my $n = shift; print " (left) "; return ( $n == 3 || $n == 8 ); } # 우변은 n이 5일때, 9일때 참 sub right { my $n = shift; print " (right) "; return ( $n == 5 || $n == 9 ); } # 1부터 10까지 .. 를 사용해서 검사 print "use ..\n"; foreach my $n ( 1 .. 10 ) { print "$n : "; my $r = ( left($n) .. right($n) ); print "[$r]\n"; } # ...를 사용해서 검사 print "use ...\n"; foreach my $n ( 1 .. 10 ) { print "$n : "; my $r = ( left($n) ... right($n) ); print "[$r]\n"; }
위 코드의 실행 결과:
use .. 1 : (left) [] 2 : (left) [] 3 : (left) (right) [1] <-- 참이 된 직후에 우변 역시 검사 4 : (right) [2] 5 : (right) [3E0] 6 : (left) [] 7 : (left) [] 8 : (left) (right) [1] <-- 참이 된 직후에 우변 역시 검사 9 : (right) [2E0] 10 : (left) [] use ... 1 : (left) [] 2 : (left) [] 3 : (left) [1] <-- 참이 된 직후에는 우변은 검사하지 않음 4 : (right) [2] 5 : (right) [3E0] 6 : (left) [] 7 : (left) [] 8 : (left) [1] <-- 참이 된 직후에는 우변은 검사하지 않음 9 : (right) [2E0] 10 : (left) []