Perlな日々

久しぶりにPerlのプログラムを書いています。

書いているのは簡単な、掲示板の様なシステムです。

プリプロの為の実験実装なんで、速度もセキュリティーも気にしなくて良いんで、手持ちの知識だけで書けるPerlを選択した訳です。

...で、自分に知識さえあれば、rdb使った方が楽そうだとは思ったんだけれども、環境構築がよくわからないんで、xmlをデータベース代わりにしようかと考えました。

で、Perlで利用できるxmlのパッケージとかモジュールって無いのかなぁって調べものをしていました。

超基礎的な言語の知識はあると思っていたんですけど、全然昨今の(?)Perl事情は把握していなかったので、ちょっとメモを残しておくことにしましょうと...

Perlのパッケージを探すときに、最初にあたるのがここらしい。

Comprehensive Perl Archive Networkの略で、Perlのモジュールをアーカイブしている。

  • Encode

一昔前までは、日本語コードの変換に、jcode.pm / jcode.plなんかを利用するのが常識だったけれども、Perl8以降はEncodeというモジュールが標準で使える。

sjis <-> utf-8 なんかの相互変換が行える

ちょっと使い方に癖があるような気がするけど、非常に便利。

後日、使い方をまとめておく

Perlxmlを取り扱うときには、だいたい必要になる基本モジュール。
私は、XML::DOMを利用しているんで、使い方までは知らない。
(XML::DOMからも利用されているんで必要)

ActivePerl 10.8 をデフォルトインストールすると入ってる

PerlでDOMを利用するためのモジュール。
使い方は以下のドキュメントを参考にしながら...

http://jonas.liljegren.org/perl/libxml/XML/DOM.html

  • ActivePerlとcpanについて

ActivePerlからだと、cpanを利用するのに苦労する。
cygwin経由で、cpanからインストールするのかな?

ActivePerlをインストールすると、PackageManagerってのが一緒にインストールされるんで、その中から必要なパッケージを探すのが無難。

cpanとPackageManagerの関連はよくわかんないけど、前述のXML::DOMは見つかったのでとりあえずの用は足りる。

XML::DOMは便利だけれども、sjisのコードを利用するとパーサで落ちてしまう。
UTF-8で利用すれば良いだけなんで、デフォルトエンコードUTF-8に指定してしまう。

出力は、UTF-8じゃ都合が悪かったんで、sjisで行いたかったんだけれども、こんな場合は Encodeモジュールを使ってあげれば事足りる

  • 文字列のバイト数

i-Mode用のcgiなんかを作る場合、Content-lengthを正しく返さないと、ページが正しく表示されない。
このため、出力文字列のバイト数を計算しなければいけない。
デフォルトエンコードUTF-8なんかに指定しておくと、legthで取得できるのはUTF-8でのバイト数になってしまうから、変換してからlengthの取得を行う

bytes::length( Encode::encode( 'shiftjis', $a_data ))


...なんか、私が勉強していた頃のPerlと比べてずいぶんとかわっているような気がするなぁ

パッケージもc++みたいに、

PackageName::Funciton()

こんな感じに引けるし、XML::DOMを使っていると、普通にクラスっぽいし(ってか、Perlでもクラスが使えるようになったんでしたっけか?)

勉強不足な点は多いけれども、Perlを使った開発は結構楽しいかもです