nDiki : Perl v5.8
スポンサード リンク
Related term
2003年12月23日 (火)
■ Time::Local::gmtime の範囲チェック

Perl v5.8.x だと、Time::Local::gmtime できちんと範囲チェックが動作している(範囲外だと croak される)のだが、Perl 5.005_03 では必ずしもそうではないようだ。 WiKicker のデバッグ中に発見。
でソースを読んでみると、古い Time::Local では cheat サブルーチンで
- 範囲チェック
- 指定した年月の開始 gmtime を計算し、%cheat にキャッシュ
している。同一年月での2度目以降 timegm 呼び出しでは %cheat キャッシュを使用して cheat サブルーチンを呼びにいかないので、範囲チェックが実行されないという塩梅。 つまり 2003年1月1日… で一度 timegm を呼び出すと2003年1月に関しては以降 cheat サブルーチンは呼ばれないため、次に 2003年1月33日…で読んでもエラーにしてくれないというわけ(最初に2003年1月33日…で呼んだ場合はちゃんとエラーになるので逆に厄介)。
Perl v5.8.0 以降に標準ではいっている Time::Local ではきちんと毎回チェックする。 うるう年・大の月/小の月も考慮してチェックされる(v5.8.0 より前のでは 31 より大きいかのチェックのみ)。
- Perl 5.005_03 -> Time::Localバージョン情報なし
- Perl v5.6.0 -> Time::Localバージョン情報なし
- Perl v5.6.1 -> Time::Localバージョン情報なし
- Perl v5.8.0 -> Time::Local VERSION 1.04
であり、CPAN では 5.005_03 でも動作する Time::Local パッケージ (1.05~)が公開されている。
Time::Local 1.04 以降を PREREQ_PM にしてもいいのだが、5.005_03 な利用者にとってはインストールするのも面倒か。 最低限のエラーチェックを自前で用意して、互換になるようにした方がいいかな。
- 最新の Module::Install は Perl 5.005_03 ステ? (2006-04-29)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- [ WiKicker ] SunOS 5.6 にインストール (2003-04-23)
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
2004年2月3日 (火)
■ [WiKicker] WiKicker の文字化け対応

WiKicker の文字化けであるが Perl v5.6.x という環境が怪しそう。 ということで、ローカルに Perl v5.6.2 を入れてテスト。
tar zxvf perl-5.6.2.tar.gz cd perl-5.6.2 rm -f config.sh Policy.sh sh Configure -de -Dprefix=/usr/local/perl-5.6.2 make make test make install
で /usr/local/perl-5.6.2/bin/perl -MCPAN -e shell でもりもり必要なモジュールをインストール。
で WiKicker のテスト。化けた。 追いかけてみると、Locale::Maketext モジュールが use utf-8 をしているため、l10n した文字列は UTF-8 として mark されてしまっているようだ*1。 で、mark されていない他の部分の(バイト列としてのUTF-8)文字列と結合したりしたところで化けたと。
ということで、Perl v5.6.x では maketext で帰ってきた文字列の UTF-8 mark を外すようにする。
if (5.006 <= $] && $] < 5.7) {
return eval "no utf8; my \$tmp = \$language_handle->maketext(\@param); \$tmp =~ /^(.*)\$/; \$1";
}
という緊急処置コード。 Perl 5.0005_03 では utf8 プラグマ自体が無いので、eval の中に入れておく。 v5.6.x での UTF-8 mark の外し方が良くわからないので、とりあえず正規表現に全マッチさせるというダサいコード(v5.8 だと utf8::* にそこら辺の関数があるのだが)。
*1Perl 5.6.x では Perl v5.8.x のように "UTF8" flag という呼び名はないのかな?
- YAML Perl モジュール (2004-05-19)
- 野良パッケージと依存 Perl モジュールのインストールセット をCPAN... (2006-02-11)
- 野良パッケージと依存 Perl モジュールのインストールセット を CPA... (2006-02-12)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
2004年5月19日 (水)
■ YAML Perl モジュール

データファイルをYAMLで扱おうと思い、YAML Perl モジュール (0.35)でちょこちょこと実験。
@ 日本語がことごとく quote される。
ある UTF-8 で書かれたファイルを読み込んで YAMLで Dump したら、日本語の部分がことごとく quote される。 これはいただけない。
my $ESCAPE_CHAR = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f]';
で判別している。手抜きではないか。 さてどうしたものか。
と考えていたら、よく考えたら Perl v5.8.x だとバイト単位ではなく文字単位で正規表現マッチングさせられるんだったことを思い出した。 手抜きだなんて思って失礼しました。
データファイルを読んで utf8::decode してから YAML で Dump するようにしたらクオートされなくなった。Good.
Perl v5.6 系だとどうすればいいんだろ。 YAML.pm を直接書き換えて
use utf8;
を追加すれば期待通りにはなるのだが、ちょっと嫌だな。
@ sequence をインラインで
短い sequence は
- a - b - c
ではなく
[a, b, c]
の形式で出して欲しい。YAML.pm のチェックしたところ
my $y = YAML->new; $y->InlineSeries(5); print $y->dump($data);
のようにインラインにしてよい上限の個数を指定すればよいことを知る。
[ UTF8 フラグ ]
- [WiKicker] WiKicker の文字化け対応 (2004-02-03)
- [ WiKicker ] hell mode - HTMLタグ付けブロックの導入 (2005-09-13)
- YAML Perl モジュール と Perl v5.6 (2004-05-20)
- Template Toolkit で UTF-8 なファイルを INCLU... (2004-10-29)
- Skype for Linux 1.0.0.1 (2005-02-02)
2007年3月8日 (木)
■ Perl の constant プラグマで1度に複数の定数を定義できるのは Perl v5.8.0 から

'use constant' を使った Perl プログラムを Perl 5.005_03 下で動かしたらエラー。 調べてみると、
use constant {
SEC => 0,
MIN => 1,
HOUR => 2,
MDAY => 3,
MON => 4,
YEAR => 5,
WDAY => 6,
YDAY => 7,
ISDST => 8,
};
(constant 1.04 Pod より)
という形で複数の定数をまとめて定義できるのは constant 1.04 からだ。
Perl 5.005_03 は 1.00、Perl v5.6 系は 1.02 で、1.04 になったのは Perl v5.8.0*1 なので、この形を使えるのは Perl v5.8 以降ということになる。
- Time::Local::gmtime の範囲チェック (2003-12-23)
- 最新の Module::Install は Perl 5.005_03 ステ? (2006-04-29)
- [WiKicker] WiKicker の文字化け対応 (2004-02-03)
- ColdSync (2004-05-05)
- CGI プログラム、Out of memory! に泣く (2001-01-04)
スポンサード リンク
■よく検索されるキーワード
提案書(75) torrent(69) perl(61) 書き方(45) 充電式カイロ(43) windows(38) x31(36) 使い方(32) linux(32) cvs(25) アジェンダとは(25) usb(25) thinkpad(23) 静電気(21) サンプル(20) 口コミ(20) ヨドバシ(20) アジェンダ(20) 画像(19) debian(19) ubuntu(19) mp980(18) f-01a(18) 手帳(17) tc-1(17) 秋葉原(16) ssh(16) subversion(16) グッズ(16) a6(15) 壁紙(15) ほぼ日手帳(15) c#(14) ダイソー(14) svn(14) 交換(14) インストール(13) 加湿器(13) firefox(12) ノート(12) 無印(12) 日本語(12) wiki(12) ganttproject(12) デロンギ(11) 方眼(11) ヨドバシカメラ(11) デザイン(11) nikkor(11) 設定(11) 作り方(11) dropbox(11) af(10) terastation(10) memcached(10) レビュー(10) カバー(10) カイロ(10) 2009(10) 除去(10) nikon(10) tortoisesvn(10) クラリチン(9) ガントチャート(9) 動画(9) ポメラ(9) ご査収(9) rcs(9) モジュール(9) n-01a(9) フィルム(9) 写真(9) システム手帳(9) edition(9) porter(9) xp(8) imap(8) 4c(8) docomo(8) ミニ6穴(8)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 12.340605s / load averages: 0.49, 0.70, 0.82
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク