Perl Quiz

ネタをふられたので回答
http://d.hatena.ne.jp/hirafoo/20100319/1269007390

問題は以下参照

http://quill.to/yoshiki/0a66f62e14

びみょーなかんじだけど

再起の場合

$key =~/\./ ?  foo($a_ref->{$`}, $', $value) : ($a_ref->{$key} = $value);

evalの場合

$key=~s/\./}->{/g ? eval"\$a_ref->{$key} = $value" : ($a_ref->{$key} = $value);

ーー追記ーー
暗号といわれたので長い変数版

再起の場合

use English; # use のところに書いてください
$key =~/\./ ?  foo($a_ref->{$PREMATCH}, $POSTMATCH, $value) : ($a_ref->{$key} = $value);

引越し手続き

一括で手続きできるサービス発見!

引越しコンシェルジェ
http://www.tepore.com/hikkoshi/renraku/

引越しの事務手続きってかなり面倒くさいので手続き代行のサービス作りたいけど、個人でできないからなーと思っていたんですよね。
が、NTTやら銀行やらクレジットカードやら携帯電話やら対応してないもの多すぎ。

対応しているところは既に自力で手続きした後だったorz

今後に期待!

terminfo & ncurseのバージョンあげた

cygwinで追加のパッケージ入れようとしたら、terminfoとncurseのバージョンあがってた。
おかげでterminfoのディレクトリ構造が変わり、zshvimの挙動が悲惨な感じになった。

zshが補完のたびにプロンプトが崩れていくのは作業する気力がなえていく。。。

解決策

~/.terminfoに必要なファイルを配置する

また使うかも知れないので以下の感じでコマンド登録しといた。

make_terminfo () {
        for CHAR in `find /usr/share/terminfo -type f | xargs -n 1 basename | perl -le '%hash; while(<>){/^(.)/; $hash{$1}=1;} print join("\n",keys %hash)'`
        do
                mkdir -p ~/.terminfo/$CHAR
                find /usr/share/terminfo -type f -name "$CHAR*" -exec cp {} ~/.terminfo/$CHAR \;
        done
}

WWW::Mechanize + Proxy 認証

某サイトからデータ引っ張ってくるためにWWW::MechanizeとWeb::Scraperでコーディングした。

Mech + Proxy認証でハマったところ。。。

clone
my $mech_clone = $mech->clone

上記でcloneを作成すると、Proxyの設定はしてくれない。

そのため、元々のオブジェクトにおいてproxyメソッドでproxyを設定した場合は、プロキシを利用しない。
また、環境変数を設定しておきnewでenv_proxyを呼ばせて自動設定させた場合は、proxy認証部分(http://foo:bar@proxyhost:proxyportのfoo:bar部分)にアクセスしようとする。

実際の動作としては、$mech->{handlers}->{request_preprepare}にLWP::UserAgent::Proxyオブジェクトが入らない。

これは、$mech->cloneではLWP::UserAgentのcloneメソッドを利用している(下記参照)のでLWPのバグor仕様っぽい。

use base 'LWP::UserAgent';

--snip--

sub clone {
    my $self  = shift;
    my $clone = $self->SUPER::clone();

    $clone->cookie_jar( $self->cookie_jar );

    return $clone;
}

cloneするのにいちいちproxyを設定しなおすのも嫌なのでmechがproxyを持っていたら再度設定するように書き直した。

こんな感じ。

sub mech_fixup {
    package WWW::Mechanize;
    no warnings 'redefine';
    *clone = sub {
        my $self  = shift;
        my $clone = $self->SUPER::clone();

        $clone->cookie_jar( $self->cookie_jar );

        if(exists $self->{proxy}){
            while(my ($k, $v) = each %{$self->{proxy}}){
                $clone->proxy([$k],$v);
            }
        }
        return $clone;
    }
}

Web::Scraperのドキュメント

Podが充実してないので若干使いにくい。
ぐぐれば山ほど出てくるし、ソース読めばいいとはいえPod充実させてほしいなぁ

mylvmbackupの開発者のサイト

こちらにあります。
バイナリが充実しているので入れやすいかも。
http://lenz.homelinux.org/mylvmbackup/

rhel5のバージョンがあるので、CentOS5に入れてみます。

追記

依存関係で死んだ。。。perl-Config-Inifilesとperl-Date-Formatをrpmで入れなきゃいけない。
rpmforgeにもないし。