【Perl】DBIx::Simple ノススメ

  1. はじめに
  2. DBIx::Simple + SQL::Abstract
  3. 単行取得メソッド
  4. 全行取得メソッド
  5. オブジェクトを返すメソッド

はじめに

Perl において DB に接続し、SQL を扱うモジュールはもちろん DBI モジュールな訳だが、これを格段に使いやすくしてくれる DBIx::Simple モジュールというのがある。

use DBIx::Simple; – 今日のCPANモジュール(跡地)
http://e8y.net/mag/009-dbix-simple/

このサイトのまとめが非常に分かり易い。例を挙げるとこんな感じ。

Continue reading

【Perl, Javascript】数値に位取りのコンマを挿入する

ものすごく車輪の再発明な気もするが、備忘録としておいておく。

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」

Continue reading

“The GUI Loft”のサイトが消滅?

Perl で GUI を構築するときに便利なアプリ、「The GUI Loft」を公開していたサイトがドメインの期限切れにより見えなくなっている。業務で必要だったので青くなったが、幸いゴミ箱から発見できたので置いておこう。

Loft_binary.zip のダウンロード

https://blog.delphinus.dev/2010/03/gui-programming-with-win32-gui-loft.html


その後、公式サイトが復活したようなので、Loft_binary.zip へのリンクは削除しておきました。


解凍したフォルダを再圧縮したものなので、オリジナルとは多少異なっている恐れがあることをお断りしておく。

Whois で調べてみると、1 月 5 日にはドメインが失効していたらしい。このまま消えちゃうのかなあ(以下のリンク先は、URL の末尾が「.com」になっているので FW によっては弾かれるかも知れません。)

2011-01-13_130146.png

vim-ref で perldoc その他を読む

2010-11-05_203439.png

vimプラグインでよりよいコーディングを
http://tech.kayac.com/archive/vim-plugin-coding.html

上のリンクを読んで、vim-ref を導入してみた。各種言語のドキュメントや、モジュールのソースが簡単に開けるようになって便利だ。詳しい使い方はリンク先を参照して貰うとして、Windows 版 Vim だと次のエラーが出てうまく使えないことがあった。

Continue reading

【Perl】DateTime::Calendar::Japanese::Era のバグ?

前回の記事の最後に書いたとおり、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;
}

Continue reading

【Perl】Excel 形式の和暦日付に変換する

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

Continue reading