infix `andthen`
infix andthen (정의된 값일 때만 이어서)
어떤 값이 정의되어 있을 때만 뒤의 작업을 이어서 하고 싶을 때가 있어요. 성공했을 때만 추가 처리하고 싶은 경우죠. andthen 연산자가 그 흐름을 표현해줘요.
본문
Operators에서
andthen 연산자는 첫 번째 인자가 정의되지 않았으면 Empty를, 그렇지 않으면 마지막 인자를 돌려줘요. 마지막 인자는 정의 여부를 전혀 검사하지 않고 그대로 돌려줘요. 단락(short-circuit) 동작을 해요. 왼쪽 결과는 오른쪽의 $_에 바인딩되거나, 오른쪽이 Callable이면 인자로 전달돼요. 이때 Callable의 arity(인자 수)는 0 또는 1이어야 해요.
이 연산자로 루틴의 반환값을 $_에 별칭 지어 두고, 그 값에 출력이나 호출자로의 반환 같은 추가 작업을 하기 편해요. andthen은 단락 동작을 하므로 왼쪽이 정의되어 있지 않으면 오른쪽 문장은 실행되지 않아요. 한 가지 팁을 드리자면, Failure는 절대 "정의된" 값이 아니기 때문에 이 연산자로 Failure를 자연스럽게 처리할 수 있어요.
"does this match?" ~~ /this/ andthen {
.put;
my $thing-to-do-if-match-succeeds;
...
} # OUTPUT: «this»
"does that match?" ~~ /this/ andthen put 'oops';
# NO OUTPUT
andthen 연산자는 with 문장 수식어와 가까운 친척이에요. 어떤 컴파일러는 with를 andthen으로 컴파일하기도 하죠. 아래 두 줄은 동등한 동작을 해요.
.say with 42;
42 andthen .say;