/ / 最新

swk's log - tb-standalone の perl 5.005 → 5.8 移行

2008-04-13

* tb-standalone の perl 5.005 → 5.8 移行 [logging][homenet]

Storable の互換性の問題 [2006-03-25-3] で「Byte order is not compatible」とか言われるため perl 5.005_03 で使い続けていた tb.cgi だが,さくらインターネットで使われている OS が FreeBSD 6.x になり perl 5.005_03 が無くなったため,動かなくなっていた.というわけでしばらくトラックバックを送ることも受け取ることも,過去のものを表示することもできなくなっていたのだけど,ようやく重い腰を上げて対応することにした.

ここにある「$Storable::interwork_56_64bitをtrue値に設定」は,Out of memory とか言われてダメだった.

というわけでここの真似をして,いったん perl 5.6.2 で読んでから Data::Dumper で Dump して,改めて perl 5.8.8 で store し直すことにした.

*.stor を *.stor.old にリネームしてから dump.pl,restore.pl の順に走らせる.一応うまくいったっぽい.

dump.pl:

#!/usr/local/bin/perl5.6.2

use strict;
use lib ".";  # 古い Storable 一式をカレントディレクトリに置いた
use Storable;
use Data::Dumper;
$Data::Dumper::Indent = 0;
$Data::Dumper::Useqq  = 1;

while (<*.stor.old>) {
    my $new_file = $_;
    $new_file =~ s/stor$/txt/;
    open(NF, "> $new_file") or die;
    my $data = Storable::retrieve($_);
    print NF Data::Dumper->Dump([$data], ["data"]), "\n";
    close(NF);
}

restore.pl:

#!/usr/local/bin/perl5.8.8

use strict;
use Storable;

while (<*.txt>) {
    my $new_file = $_;
    $new_file =~ s/txt$/stor/;
    open(OF, $_) or die;
    my ($line, $data);
    $line = <OF>;
    eval $line;
    close(OF);
    Storable::store($data, $new_file);
}

最終更新時間: 2009-01-04 15:28


Shingo W. Kagami - swk(at)kagami.org