はじめに
Perl において DB に接続し、SQL を扱うモジュールはもちろん DBI モジュールな訳だが、これを格段に使いやすくしてくれる DBIx::Simple モジュールというのがある。
use DBIx::Simple; – 今日のCPANモジュール(跡地)
http://e8y.net/mag/009-dbix-simple/
このサイトのまとめが非常に分かり易い。例を挙げるとこんな感じ。
Perl において DB に接続し、SQL を扱うモジュールはもちろん DBI モジュールな訳だが、これを格段に使いやすくしてくれる DBIx::Simple モジュールというのがある。
use DBIx::Simple; – 今日のCPANモジュール(跡地)
http://e8y.net/mag/009-dbix-simple/
このサイトのまとめが非常に分かり易い。例を挙げるとこんな感じ。
複数バージョンの Perl をインストールして、簡単に切り替えながら使えるツールとして perlbrew というプロダクトがある。今回 OS を再インストール(CentOS 5.6)したついでに perlbrew 及び、これの Python 版である pythonbrew を使ってみた。
ものすごく車輪の再発明な気もするが、備忘録としておいておく。
Perl クックブックのレシピ 2.16 によると、表題のことを行う関数は次のように表せる。
sub commify {
my $text = reverse $_[0];
$text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;
return scalar reverse $text;
}
これを Javascript で表すと次のようになる。
String.prototype.reverse=function(){return this.split('').reverse().join('')};
Number.prototype.commify=function(){return this.toString().reverse().replace(/(\d\d\d)(?=\d)(?!\d*\.)/g,'$1,').reverse()};
// 使用例
alert( (123456789).commify() ); // 「123,456,789」
alert( (-123456789).commify() ); // 「-123,456,789」
alert( (1234.56789).commify() ); // 「1,234.56789」
Perl で GUI を構築するときに便利なアプリ、「The GUI Loft」を公開していたサイトがドメインの期限切れにより見えなくなっている。業務で必要だったので青くなったが、幸いゴミ箱から発見できたので置いておこう。
https://blog.delphinus.dev/2010/03/gui-programming-with-win32-gui-loft.html
Loft_binary.zip へのリンクは削除しておきました。
解凍したフォルダを再圧縮したものなので、オリジナルとは多少異なっている恐れがあることをお断りしておく。
Whois で調べてみると、1 月 5 日にはドメインが失効していたらしい。このまま消えちゃうのかなあ.com」になっているので FW によっては弾かれるかも知れません。)

vimプラグインでよりよいコーディングを
http://tech.kayac.com/archive/vim-plugin-coding.html
上のリンクを読んで、vim-ref を導入してみた。各種言語のドキュメントや、モジュールのソースが簡単に開けるようになって便利だ。詳しい使い方はリンク先を参照して貰うとして、Windows 版 Vim だと次のエラーが出てうまく使えないことがあった。
前回の記事の最後に書いたとおり、DateTime::Calendar::Japanese::Era の挙動がなんかおかしい。有り体に言って、明治より前の元号を指定すると正常に動かないのだ。例えば、こんなスクリプトを書くと……
#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use DateTime::Format::Strptime;
use DateTime::Calendar::Japanese::Era;
binmode STDOUT => ":utf8";
my @ary = qw!
1861/4/27
1861/4/28
1864/4/24
1864/4/25
1865/6/22
1865/6/23
1868/10/22
1868/10/23
!;
my $fmt = new DateTime::Format::Strptime(
pattern => "%Y/%m/%d",
);
for my $i ( @ary ) {
my $d = $fmt->parse_datetime( $i );
my $era = DateTime::Calendar::Japanese::Era
->lookup_by_date( datetime => $d );
printf "%s => %s%d年\n", $i, $era->name, $d->year - $era->start->year + 1;
}
Excel で和暦の日付は次のように表される。
書式: [年号][年].[月].[日]
例 : H22.10.26
S64.1.7
これを Perl で扱おうと思って DateTime オブジェクトを扱うスクリプト書いた。
#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use DateTime::Format::Strptime;
my $fmt = new DateTime::Format::Strptime(
pattern => "%Y/%m/%d",
);
my $平成 = $fmt->parse_datetime( "1989/1/8" );
my $昭和 = $fmt->parse_datetime( "1926/12/25" );
my $大正 = $fmt->parse_datetime( "1912/7/30" );
my $明治 = $fmt->parse_datetime( "1868/10/23" );
sub to_jp {
my $d = shift;
$d or return "";
my $y = $d >= $平成 ? "H" . ( $d->year - $平成->year + 1 ) :
$d >= $昭和 ? "S" . ( $d->year - $昭和->year + 1 ) :
$d >= $大正 ? "T" . ( $d->year - $大正->year + 1 ) :
$d >= $明治 ? "M" . ( $d->year - $明治->year + 1 ) :
$d->year;
sprintf "%s.%d.%d", $y, $d->month, $d->day;
}
for my $i (qw! 2010/10/26 1989/1/7 !) {
my $dt = $fmt->parse_datetime( $i );
print to_jp( $dt ) . "\n";
}
$ perl test.pl H22.10.26 S64.1.7