Archive

Posts Tagged ‘Perl’

C::P::Session::State::URI で HTML::Entities に日本語をエスケープさせない方法

Catalyst - Session管理とHTMLエンティティコード(数値文字実体参照) でも言及されているように、Catalyst::Plugin::Session::State::URI を使っていると、

<img alt="日本語" />

などが、エスケープされてしまい、表示がおかしくなったりします。

(続きを読む…)

for で変換 vs ダンプした文字列を変換して eval

ふと、for で回してパラメーターの個数分変換するのと、Data::Dumper でダンプして1回だけ変換して eval するのとどっちが速いのか気になってベンチマーク取ってみました。

コードと結果は以下。

(続きを読む…)

Catalyst::Plugin::FillInForm::ForceUTF8 で fill_password などのオプションが渡せない

Catalyst::Plugin::FillInForm::ForceUTF8 に抜けがあったのでパッチ書きました。

--- lib/Catalyst/Plugin/FillInForm/ForceUTF8.pm.orig    2009-02-08 14:39:24.000000000 +0900
+++ lib/Catalyst/Plugin/FillInForm/ForceUTF8.pm 2009-02-08 14:40:02.000000000 +0900
@@ -115,11 +115,13 @@
 sub fillform {
     my $c = shift;
     my $fdat = shift || $c->request->parameters;
+    my $additional_params = shift;

     $c->response->output(
         HTML::FillInForm::ForceUTF8->new->fill(
             scalarref => \$c->response->{body},
-            fdat      => $fdat
+            fdat      => $fdat,
+            %$additional_params,
         )
     );
 }

HTML::MobileJpCSS レビュー

携帯サイトの CSS 対応は、今まで HTML::DoCoMoCSS を使用していましたが、01/15 に HTML::MobileJpCSS がリリースされていたので試してみました。

どういうことをしてくれるモジュールかと言うと、例えば hr タグは色を付けたいときに、キャリアによって下記のようにスタイルの指定が違います。

DoCoMo   <hr style="border-color:#FF0000;" />
au       <hr style="color:#FF0000;" />
SoftBank <hr style="border-color:#FF0000;" />

これを、ひとつの指定でモジュール側で 3 キャリア分の指定方法の振り分けを自動でやってくれるというものです。

3キャリア対応のCSS変換モジュールHTML::MobileJpCSS

(続きを読む…)

Linux に ming ライブラリ + Perl SWF モジュールのインストール

Fedra Core 5 に libming をインストールする方法です。

現時点での最新版、ming 0.4.0-rc2 をダウンロードします。
(続きを読む…)

perldoc で読む perl ドキュメントの日本語化

perl でのコーディング中に perldoc で、perlfunc や perlreref を参照することは多々あると思います。

そのドキュメントが日本語ならば、もうちょっと読みやすいと思います。幸い、perldocjp という日本語化プロジェクトで、いくつかの pod ファイルが日本語化されて公開されているので、それをダウンロードして入れ替えてみましょう。

(続きを読む…)

日時や時間を文字列で取得

日時を文字列で取得する場合、

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$date = sprintf("%04d/%02d/%02d", $year+1900, $mon+1, $mday);

こんな書き方が多いですが、もっと短くこう書けます。

use POSIX;
my $date = strftime("%Y/%m/%d", localtime);

DateTime モジュールで同じことができますが、POSIX は標準モジュールなのでインストールしなくても使えるというのが強みです。Windows の Strawberry Perl でも使えました。

と、これだけなら大した事無い違いなのですが、strftime はもっと便利です。
(続きを読む…)

UTF-8 文字列の URI エスケープ

RFC 2396 で、unreserved として定められた文字列を URI エスケープする場合には、


$str =~ s/([^a-zA-Z0-9_.!~*'()-])/’%’ . unpack(’H2′, $1)/eg;

とすれば良いですが、エスケープする文字列が UTF-8 の場合、注意しないといけないことがあります。それは、変換前に UTF-8 フラグを落とすことです。


utf8::encode($str) if utf8::is_utf8($str);

を変換前に追加しましょう。

数値リテラルなど

数値リテラルで、頭に 0x や 0 を付ければ、それぞれ 16 進数、8 進数の数値を記述できることは常識でした。

$i = 0×10; #16
$i = 010; #8

しかし、これは知りませんでした。

$i = 0b0101; #5
$s = “\x{3042}”; #あ (UTF-8)

頭に 0b で 2 進数、\x{nnnn} で Unicode 文字を記述できる。
しかし Perl 5.6 以上らしいので、この記述を使う場合は、後ではまらないように

require 5.006;

を忘れずに書きましょう。