smart match 연산자 ~~ 는 너무 경우의 수가 많아 복잡하고
경우에 따라 일관성을 가지고 동작하지 못하는 부분이 있어
차후 deprecate 시키든지 다시 깔끔하게 정리하려고 하는 것 같습니다.
따라서 그때까지는 쓰지 말기를 추천하더군요.
참고:
http://blogs.perl.org/users/brian_d_foy/2011/07/rethinking-smart-matching.html
그리고 C의 switch 같은 기능의 given ~ when 구문은
given과 같이 사용되는 lexical $_ 변수와 위의 내부적으로
given ~ when 구문의 비교에 있어 기본으로 사용되는 smart match연산자
와 얽힌 부분에 문제가 있어 역시 향후 기능과 동작이 다시 완벽해지기
전까지는 역시 사용하지 말 것을 추천하고 있습니다.
참고:
http://www.effectiveperlprogramming.com/blog/1333
http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2011-05/thrd9.html#00768
http://blogs.perl.org/users/leon_timmermans/2011/10/why-do-you-want-new-major-features-in-core.html
에 보면
- Smartmatching? I think everyone agrees it is broken.
given
/when
is even worse as it's almost impossible to predict if it will use smartmatching or not.- Lexical
$_
? Mostly a new source of bugs, and the_
prototype is merely a hack to work around lexical$_
issues.
Learning Perl 5판 과 한글 번역판인 "거침없이 배우는 펄" 에서 smart match와 given~when 구문에
비교적 많은 분량을 할애하여 설명하고 있는데 그 부분은 그냥 무시하시면 될듯합니다.
(얼마전 나온 Learning Perl 6판에는 이런 부분을 언급하고 사용에 주의하라고 하는 내용이 들어간듯)
추가:
( Programming Perl 4판에서는 given ~ when은 아직 시험적 상태로 보지만 스마트매칭이 적용되지 않는 명시적인 숫자,문자열 매칭 조건은 향후 어떻게 변하든 문제 없으니 안심하고 사용해도 괜찮다고 함)