本を読む

読書やコンピュータなどに関するメモ

Perl 5.10ではutf8フラグのpack技が使えない

 DebianのPerl 5.10な環境にHatena::Keywordモジュール(バージョン0.05)をインストールしようとした。が、make testが通らない。「HTTP::Message content must be byte」とかそんなエラーメッセージが出る。

 Hatena::Keywordの中を見ると、こんな処理がされていた。

    $body = pack('C0A*', $body); # hacking for utf-8 flag

 調べてみたら、数年前にShibuya.pm方面で流行った(?)技らしい。

 ためしにコード片を書いてみる。

#!/usr/bin/perl
use strict;
use warnings;
use utf8;

my $text = 'あいうえお';
$text = pack('C0A*', $text);
print $text, "\n";

 まずPerl 5.8で試す。

$ perl hoge.pl
あいうえお

 続いてPerl 5.10で試す。

$ perl hoge.pl
Wide character in print at hoge.pl line 8.
あいうえお

つまり、Perl 5.10ではこの方法でutf8フラグが落ちないようだ。さらに調べると、Kawa.netさんのブログで、packの仕様変更が詳しく解説されていた。

 結論として、手元ではEncode::encode()を使うよう書きかえるのがてっとりばやそう。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/462-98a0ce75

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad