Home > perl Archive

perl Archive

1 2 3 4 5 6 7

【Perl】Dyn.com の IP アドレス更新をスクリプトで行う

ホストに割り当てられたグローバル IP アドレスの変更を検知し、Dyn.com に変更を適用するスクリプトを書いた。

公式に似た機能のスクリプト ddclient がすでにあるのだがそれを車輪の再発明。MooseX::Daemonize を使ってデーモンにしてみた。

delphinus35/dynupdate - GitHub
https://github.com/delphinus35/dynupdate

使用例

MooseX::Daemonize を使ったデーモンの作り方はいつかまとめよう。

Continue reading

【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)' },
);

Continue reading

【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

初めての perlbrew & pythonbrew

複数バージョンの Perl をインストールして、簡単に切り替えながら使えるツールとして perlbrew というプロダクトがある。今回 OS を再インストール(CentOS 5.6)したついでに perlbrew 及び、これの Python 版である pythonbrew を使ってみた。

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 のダウンロード

http://blog.remora.cx/2010/03/gui-programming-with-win32-gui-loft.html

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

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

Whois で調べてみると、1 月 5 日にはドメインが失効していたらしい。このまま消えちゃうのかなあ *1

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

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/101605

Diff 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 上でインストールしてみた記録だ。

Continue reading

1 2 3 4 5 6 7

Index of all entries

Home > perl Archive

Feeds
CC Licence

Creative Commons License

このブログはクリエイティブ・コモンズでライセンスされています。

W3C Validation

I ♥ validator

Return to page top