Home > perl Archive
perl Archive
【Perl】Dyn.com の IP アドレス更新をスクリプトで行う
ホストに割り当てられたグローバル IP アドレスの変更を検知し、Dyn.com に変更を適用するスクリプトを書いた。
公式に似た機能のスクリプト ddclient がすでにあるのだがそれを車輪の再発明。MooseX::Daemonize を使ってデーモンにしてみた。
delphinus35/dynupdate - GitHub
https://github.com/delphinus35/dynupdate
使用例
MooseX::Daemonize を使ったデーモンの作り方はいつかまとめよう。
- Comments: 0
- TrackBacks: 0
【Perl】DBIx::Simple で副問い合わせや JOIN を使う
DBIx::Simple + SQL::Abstract を使うと簡単な SQL だと記述が簡潔にすむのだが、副問い合わせや JOIN を使い出すと途端に複雑になる。こういう場合は素直に素の SQL を書いた方がいいのだが、無理矢理にでも書くときはどうなるかやってみる。
WHERE 句にリテラル SQL を書く
文字列ではなく、文字列リファレンスを使う。例えば誕生日の「日」より「月」の方が数値として大きい(五月四日とか一〇月三日とか)人のリストを得たいとする。
SELECT id, name FROM directory WHERE MONTH(birthday) > DAY(birthday)
これを DBIx::Simple で表すとこうなる。
my $ds = DBIx::Simple->new($dbh);
my $rs = $sa->select('directory',
['id', 'name'],
{ 'MONTH(birthday)' => { '>' => \'DAY(birthday)' } },
# { 'MONTH(birthday)' => \'> DAY(birthday)' },
);
- Comments: 0
- TrackBacks: 0
【Perl】DBIx::Simple ノススメ
はじめに
Perl において DB に接続し、SQL を扱うモジュールはもちろん DBI モジュールな訳だが、これを格段に使いやすくしてくれる DBIx::Simple モジュールというのがある。
use DBIx::Simple; - 今日のCPANモジュール(跡地)
http://e8y.net/mag/009-dbix-simple/
このサイトのまとめが非常に分かり易い。例を挙げるとこんな感じ。
- Comments: 0
- TrackBacks: 0
初めての perlbrew & pythonbrew
複数バージョンの Perl をインストールして、簡単に切り替えながら使えるツールとして perlbrew というプロダクトがある。今回 OS を再インストール(CentOS 5.6)したついでに perlbrew 及び、これの Python 版である pythonbrew を使ってみた。
- Comments: 0
- TrackBacks: 0
【Perl, Javascript】数値に位取りのコンマを挿入する
- 2011年1月21日 09:00
- javascript | perl
- Tweet

ものすごく車輪の再発明な気もするが、備忘録としておいておく。
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」
- Comments: 0
- TrackBacks: 0
“The GUI Loft”のサイトが消滅?
Perl で GUI を構築するときに便利なアプリ、「The GUI Loft」を公開していたサイトがドメインの期限切れにより見えなくなっている。業務で必要だったので青くなったが、幸いゴミ箱から発見できたので置いておこう。
http://blog.remora.cx/2010/03/gui-programming-with-win32-gui-loft.html
その後、公式サイトが復活したようなので、
Loft_binary.zip へのリンクは削除しておきました。
解凍したフォルダを再圧縮したものなので、オリジナルとは多少異なっている恐れがあることをお断りしておく。
Whois で調べてみると、1 月 5 日にはドメインが失効していたらしい。このまま消えちゃうのかなあ *1 。
- Comments: 0
- TrackBacks: 0
vim-ref で perldoc その他を読む
vimプラグインでよりよいコーディングを
http://tech.kayac.com/archive/vim-plugin-coding.html
上のリンクを読んで、vim-ref を導入してみた。各種言語のドキュメントや、モジュールのソースが簡単に開けるようになって便利だ。詳しい使い方はリンク先を参照して貰うとして、Windows 版 Vim だと次のエラーが出てうまく使えないことがあった。
- Comments: 2
- TrackBacks: 0
【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;
}
- Comments: 0
- TrackBacks: 0
【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
- Comments: 0
- TrackBacks: 0
Perl5.12 で mod_perl をインストール
Perl 5.12 で mod_perl をインストールしたときの記録。Apache のバグ(?)によってすんなりとはいかなかった。
http://blog.remora.cx/2010/02/centos-perl-5101-catalyst-mod-perl.html
参考リンクの通りにインストールしていると、mod_perl の Makefile.PL でエラーが発生した。
[ error] '/usr/sbin/apxs -q NOTEST_CPPFLAGS' failed: [ error] Use of assignment to $[ is deprecated at /usr/sbin/apxs line 97.
エラーメッセージでググると、これは Apache のソースを書き換える必要があるらしい。
Mailing List Archive: ModPerl: ModPerl
perl 5.12 / mod_perl
http://www.gossamer-threads.com/lists/modperl/modperl/101605Diff of /httpd/httpd/trunk/support/apxs.in
http://svn.apache.org/viewvc/httpd/httpd/trunk/support/apxs.in?r1=807930∓r2=932791&diff_format=h
以下は、CentOS 5.5 上でインストールしてみた記録だ。
- Comments: 0
- TrackBacks: 0
Home > perl Archive
- Feeds
- CC Licence
-
このブログはクリエイティブ・コモンズでライセンスされています。
- W3C Validation

