다이아몬드 입력 연산자 while(<>){...}
을 사용하여 펄에서 UTF-8 입력을 읽으 려합니다. 표준 입력 또는 파일에서 입력 한 것이 든 상관 없습니다.다이아몬드 연산자 (<>)로 UTF-8을 읽으려면 어떻게해야합니까?
그래서 내 스크립트는 동일한 출력을 제공, 평소와 같이,이 두 가지 방법으로 호출해야한다 :
./script.pl utf8.txt
cat utf8.txt | ./script.pl
그러나 출력은 다르다! 두 번째 호출 (cat
사용)은 UTF-8을 올바르게 읽는 것으로 설계된 것처럼 보입니다. 여기에 스크립트입니다 :
#!/usr/bin/perl -w
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
while(<>){
my @chars = split //, $_;
print "$_\n" foreach(@chars);
}
나는 그것이 두 경우 모두에서 제대로 UTF-8을 읽을 수 있습니까? 가능한 경우, 다이아몬드 운전자 <>
을 계속 읽고 싶습니다.
편집 :
나는 아마 다른 출력을 기술해야한다 깨달았다. 내 입력 파일에 다음 시퀀스가 포함되어 있습니다 : a\xCA\xA7b
.
a
\xCA\xA7
b
을하지만 다른 방법은 저에게이 제공 : cat
와 방법은 제대로 출력하는 대신에 열려있는 프라그를 사용하는
a
\xC3\x8A
\xC2\xA7
b
ARGV가 여러 파일에 대해 재설정되기 때문에 잠시 동안 binmode가 있어야합니까? –
실험적으로, 예 :) – jrockway
나는 이것을보고 생각했다. "그건 작동하지 않을 것이다! 첫 행이 이미'<>'"에서 읽힌 후에'binmode'를 설정하고있다. 그러나, 나는 그것을 시도하고 * 않습니다 * 작동합니다. 매우 마술 적입니다. – mavit