文字列に ASCII コードしか使われていないかどうかを判定する修行
Perl で、文字列が ASCII コードの文字だけで構成されているかどうか調べたい。Encode で何かできるのかな、できるならそれを使うべきだ、と思ったのだが、そういう方法は見つけられていない。
とりあえず、ord 関数でトップビットが立っていないかを調べる方法を使ってみた。より正しい方法を知っている人、よろしく。
use strict; use warnings; use utf8; use Encode; sub is_ascii { my $str = shift; foreach my $ch (split(q{}, $str)) { return 0 if ord($ch) > 127; } return 1; } while (my $line = <DATA>) { $line =~ s{ [\n\r]+ \z }{}xms; my ($is_utf8, $is_ascii) = (Encode::is_utf8($line), is_ascii($line)); print encode_utf8("$is_utf8, $is_ascii, $line\n"); } __DATA__ テスト test てすと deth Another Test String Including TAB
[takeyuki@sunya ~]$ perl f.pl 1, 0, テスト 1, 1, test 1, 0, てすと deth 1, 1, Another Test String Including TAB