2011/11/03

Perl 5.10 부터 도입된 스마트매칭 ~~ 연산자와 given~when구문 문제

Perl 5.10 부터 도입된
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은 아직 시험적 상태로 보지만 스마트매칭이 적용되지 않는 명시적인 숫자,문자열 매칭 조건은 향후 어떻게 변하든 문제 없으니 안심하고 사용해도 괜찮다고 함)