Perlな日々
久しぶりにPerlのプログラムを書いています。
書いているのは簡単な、掲示板の様なシステムです。
プリプロの為の実験実装なんで、速度もセキュリティーも気にしなくて良いんで、手持ちの知識だけで書けるPerlを選択した訳です。
...で、自分に知識さえあれば、rdb使った方が楽そうだとは思ったんだけれども、環境構築がよくわからないんで、xmlをデータベース代わりにしようかと考えました。
で、Perlで利用できるxmlのパッケージとかモジュールって無いのかなぁって調べものをしていました。
超基礎的な言語の知識はあると思っていたんですけど、全然昨今の(?)Perl事情は把握していなかったので、ちょっとメモを残しておくことにしましょうと...
Perlのパッケージを探すときに、最初にあたるのがここらしい。
Comprehensive Perl Archive Networkの略で、Perlのモジュールをアーカイブしている。
- Encode
一昔前までは、日本語コードの変換に、jcode.pm / jcode.plなんかを利用するのが常識だったけれども、Perl8以降はEncodeというモジュールが標準で使える。
ちょっと使い方に癖があるような気がするけど、非常に便利。
後日、使い方をまとめておく
- XML::Parser
Perlでxmlを取り扱うときには、だいたい必要になる基本モジュール。
私は、XML::DOMを利用しているんで、使い方までは知らない。
(XML::DOMからも利用されているんで必要)
ActivePerl 10.8 をデフォルトインストールすると入ってる
- XML::DOM
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を使った開発は結構楽しいかもです