« August 2003 | メイン | October 2003 »

September 29, 2003

sha1 による暗号化

よさそうなのは2つ.
 ・Digest::SHA1 :わりと有名らしい.外部プログラムを使う.
 ・Mail::SpamAssassin::SHA1 : かなり無名らしい.Pure Perl

投稿者 msano : 09:46 PM | コメント (1) | トラックバック

負の値

勤務時間の申請を間違える.

年休が実際よりも減ってしまって,振替休日が実際よりも増えてしまう.
つじつまを合わせようとして,次の次の月で調整ぎみの申請をしてみる.が,つじつまの合わせ方を間違えて,さらにややこしい状態になる.給与明細に,「一斉振替未取得 -2.0 日」の文字.未取得が -2.0日ということは,取得が +2.0日 ということで,つまり,振り替えるはずの休日を労働前にいただいたということになる.マイナスの日付でも表示されるということは,そういうことが可能なのだろうか.
まあ,また次の月に調整しよう,とか考えてると,上司に呼び出された.人事からクレームが来たらしい.やはり怪しまれたか.
結局,過去にさかのぼって,3か月分くらいの申請をやりなおした.

投稿者 msano : 09:10 PM | コメント (5) | トラックバック

データ構造のコピー

perl で(perlに限らないが),複雑なデータ構造を使用する場合,浅いコピー(shallow copy)がよく問題になる.
これを解決してくれるのが,↓のモジュール
 ・Storable
 ・Clone
どちらも,深いコピーを実現する.

ただし,どちらも XS 入り.
Storable
はperl5.8 なら標準で入ってるっぽい.

幸いなことに,Clone のクローンとして Clone::PP というのがあり,こちらは pure perl で書かれているようだ.たぶん,PP は pure perl の略だろう.

ほかに,Util というモジュールにも clone() サブルーチンがある.

投稿者 msano : 08:56 PM | コメント (0) | トラックバック

シリアライズ

perl のデータ構造をシリアライズするモジュールを発見.
Storable とか,Data::Serializer とか.
複雑なデータ構造をストレージにダンプしたり,取り出したりできる.
メモリ使用量の多すぎるアプリにとっては,使えるモジュールと思われる.

ただ,どちらも XS で外部プログラムを呼んでいるのが問題.シリアライズしたいのだが...ちなみに,Data::Serializer は,内部のシリアライズ・エンジンとして,Data::Dumper などを使用している.

投稿者 msano : 08:40 PM | コメント (0) | トラックバック

September 27, 2003

ping test

ping test

投稿者 msano : 10:35 PM | コメント (0) | トラックバック

September 25, 2003

Data::Dumper

Data::Dumperモジュールはかなり使える.

$ perl -MCPAN -e shell
> install Data::Dumper

たとえば,↓こんな感じのプログラムを実行すると,
--------------------------------------
use Data::Dumper;

my $data = [
  ['a', 'b'],
  'c',
  {d=>'e'},
  {f=>{f=>'g'},h=>{h=>'i'}}
];

print Dumper($data);
--------------------------------------

↓こんなふうに,変数の中身を出力してくれる.
--------------------------------------
$VAR1 = [
  [
   'a',
    'b'
  ],
  'c',
  {
   'd' => 'e'
  },
  {
   'h' => {
    'h' => 'i'
   },
   'f' => {
    'f' => 'g'
   }
  }
 ];
--------------------------------------
複雑なデータ構造を扱うプログラムを書くのが,かなり楽になる.

投稿者 msano : 10:01 PM | コメント (1) | トラックバック

September 21, 2003

perl のバージョンと文字コード

perl で文字コード変換したければ,5.8 以降では Encode を,5.6以前ではJcodeを,というふうに使い分けないといけないらしい.5.6以前ではEncode は標準ライブラリではない.5.8以降でもJcode は使えるが,Encode を使用したほうが無難.

perl の有名な文字コード変換モジュールに, Jcodeがある.この Jcode は,perl 5.8 以降では,Encodeモジュールとして,perlの標準ライブラリに入っている.

5.8以降でもJcode は使える.なので,いろいろなバージョンのperlで動くようなプログラムをつくりたければ,Jcode を使うようにすれば良い,,,,と思っていた.しかし,どうやら考えを改めなければならないらしい.

理由は,5.8 で Jcode を使用して EUC-JP → UTF-8 の変換を行うと,チルダ「~」が文字化けしてしまうこと.不思議なことに,経験した範囲では,他の文字は正常に変換される.Encode を使うと,チルダもちゃんと変換される.

では,一つのプログラムで,5.005 でも 5.6 でも 5.8 でも動かしたい場合はどうすればいいかというと,perl 5.8 以上ならEncodeを,5.6以前ならJcode を使うように条件分岐すればよい.具体的には,バージョン変数 $] を見たり,eval {require Encode}; などとしてエラーが出るかどうかを調べればよい.

投稿者 msano : 05:19 PM | コメント (2) | トラックバック