Perl で全角空白(スペース)にマッチ
2009年06月10日
use utf8;
をすると \s
で全角空白(スペース)にもマッチするということでスクリプトを作っていたら、どうも上手く動作しないので調べてみると。\s
で全角空白にマッチするのは UTF8 フラグが付いている文字列に対してらしい。
外部から読み込んだファイルの文字列には use utf8;
しても UTF8 フラグが付かないので上手く動かなかったらしい。
そこで、外部から読み込んだ文字列は Encode::decode_utf8
で UTF8 フラグを付ける。
#!/usr/bin/env perl -wnl use strict; use warnings; use Encode; use utf8; my $line = $_; # UTF8 フラグ無し my $str = "内部:hello world.ハロー ワールド。"; # UTF8 フラグ有り my $line2 = Encode::decode_utf8($line); # UTF8 フラグを付ける $line =~ s/\s//g; $line2 =~ s/\s//g; $str =~ s/\s//g; print $line; binmode STDOUT, ":utf8"; print $line2; print $str;
実行結果
$ ./u8.pl hoge.txt
外部:helloworld.ハロー ワールド。
外部:helloworld.ハローワールド。
内部:helloworld.ハローワールド。
hoge.txt の中身
外部:hello world.ハロー ワールド。
内部文字列では UTF8 フラグが付いているために全角空白も \s
でマッチしている。
ミニマルPerl Unix/LinuxユーザのためのPerl習得法
posted with amazlet at 09.06.05
Tim Maher
オライリージャパン
売り上げランキング: 279701
オライリージャパン
売り上げランキング: 279701