firefox の履歴から URI を標準出力に書き出す

subtech - Bulknews::Subtech - IE の履歴を InternetShortcut に書き出す」と同じようなことを firefox でも。LinuxMacOS X で動作確認してますが、Windows でも動くかどうかはわかりません。
profile.ini を読んでデフォルト・プロファイルのパスを求めるには Mozilla::ProfilesIni を、その中に入っている履歴データベースを読み出すには File::Mork を使えば良いらしいです。

#!/usr/bin/perl
use strict;
use warnings;

use File::Spec;
use File::Mork;
use Mozilla::ProfilesIni;

my $profile = Mozilla::ProfilesIni->new(
    path => Mozilla::ProfilesIni::_find_profile_path(
        home => $ENV{HOME},
        type => "firefox",
    )
);
my $history = File::Mork->new(
    File::Spec->catfile(
        $profile->profile_path(
            grep { $profile->profile_is_default($_) } $profile->profile_names
        ),
        'history.dat'
    )
) or die "cannot open firefox history repository in the default profile.";
for my $entry ($history->entries) {
    print $entry->URL, "\n" if $entry->URL;
}

$entry のアクセッサには、URL の他に ID、Hostname、VisitCount、LastVisitDate、FirstVisitDate、Referrer、Name があるようです。ID は内部管理用か。こいつのアクセッサが AUTOLOAD で動いているので、取扱い注意だな。
もう一つ。File::Mork->new の処理時にエラーをだして異常終了したことがあったのですが、いつのまにかエラーなしで動くようになってしまって原因を調べる余裕がありませんでした。しまった。エラーが出たときの history.txt ファイルをコピーして保存しておけば良かった。この件も様子見です。