우분투 18.04, perl 5.26.1 에서, 다음 명령을 내리면 엉뚱한 결과를 받게 된다.
perl -ne 'print scalar reverse' <<< "자유롭게 저 하늘을 날아가도 놀라지 말아요" ��섕쐧� ��켝뀆� ��뀰ꄕ젂� ��옊똕� ��� ��ꭡ렜쐞�%
원했던 값이 아닌, 문자라 할 수도 없는 쓰레기값이 출력되었는데..
이를 바로 잡기 위해서는 -C 를 붙여줘야 한다.
perl -C -ne 'print scalar reverse' <<< "자유롭게 저 하늘을 날아가도 놀라지 말 아요" 요아말 지라놀 도가아날 을늘하 저 게롭유자
-C 는 Unicode 와 연관이 된 명령이라고 하는데, 자세한 사항은 perldoc perlrun 에서 알아볼 수는 있으나.. 봐도 잘 모르겠고, 그냥 이렇게 쓰면 된다는 사실만 기억하자.
헌데, 모든 명령에서 저런 결과가 나타나지는 않는다.
perl -alne 'print "@{[reverse @F]}"' <<< "자유롭게 저 하늘을 날아가도 놀라지 말아요" 말아요 놀라지 날아가도 하늘을 저 자유롭게
여기선 제대로 나오는데..
아마도, scalar 처리 시에, 문자를 몇바이트로 보는지가 명확하지 않았기 때문에 저런 오류가 발생한게 아닐까, 그저 짐작만 해볼 뿐.
어쨌든, 이런 비슷한 오류가 있을 땐 -C 를 붙여주면 되겠다.
그런데, perl 을 직접 실행할 때, 즉 One-liner 일 때는 -C 를 붙이면 되지만, 스크립트로 작동할 때는 이게 또 안된다.
#!/usr/bin/perl -C 어쩌고 저쩌고..
이렇게 해서 실행하면, Too late for “-C” option at … 이란 오류가 발생한다.
그렇다고 이걸 없이 실행하면, Wide character in print at … 이라는 불평을 들어야 한다.
검색을 해보니, 몇가지 방법이 있는 모양인데, 눈에 먼저 들어온 해법을 선택했다.
#!/usr/bin/perl use utf8; use open ':std', ':encoding(UTF-8)';
위 글에 의하면, use utf8 은 현재 소스코드가 utf8 로 작성되었다고 알려주는 명령이다. 따라서, 사실 큰 의미는 없을 듯 하다.
use open … 이게 UTF8 을 제대로 처리(Input/Output)하는 명령이다.
(적어도 지금까지는) 이 정도면 충분한 듯?