Эта статья весьма специфична, надеюсь, она поможет тем, кто сталкивается с задачей работы с файлом cookies4.dat. Этот файл находится в конфигурационной директории браузера opera и имеет достаточно специфический . Традиционный метод — запустить браузер и сделать необходимые исправления вручную. Но хорошо, если вам надо исправить пару файлов, а что если тысячи их? На помощь приходит perl и модуль HTTP::Cookies::Opera. Однако не всё так просто, этот модуль требует установки еще двух модулей, один из которых появился только в портах 9-ой ветки FreeBSD. Для более ранних версий вам придется удалить практически все установленные пакеты, скачать последний snapshot и собрать perl5.12. Кто забыл, напомню:

# portsnap fetch
# portsnap extract
# /usr/ports/lang/perl5.12 && make insatl clean

Далее ставим еще 2 порта:

# /usr/ports/devel/p5-Test-More-UTF8 && make install clean
# /usr/ports/www/p5-HTTP-Cookies && make install clean

Далее необходимо скачать . Распаковываем и собираем модуль:

# fetch http://cpan.uwinnipeg.ca/cpan/authors/id/G/GR/GRAY/HTTP-Cookies-Opera-0.07.tar.gz
# tar -xf HTTP-Cookies-Opera-0.07.tar.gz
# ./HTTP-Cookies-Opera-0.07.tar.gz
# make test install

А вот пример скрипта, которые показывает вам список cookie в файлах рекурсивно, изменяет время жизни и записывает новый файл.

#!/usr/bin/perl

use HTTP::Cookies::Opera;

$path = '/usr/home/myuser/cookies';

(WORK_DIR, $path);
@DIRS = (!/^\.\.?$/, WORK_DIR);
foreach $dir (@DIRS) {
my $file = $path.'/'.$dir.'/cookies4.dat';
my $cookie_jar = HTTP::Cookies::Opera->new(file => $file);
my $cookie_jar_new = HTTP::Cookies::Opera->new(file => $file.'-new');
my @cookies = ("\n", $cookie_jar->as_string);
foreach $cookie (@cookies) {
"$file $cookie\n";
$cookie =~ /^Set-Cookie3:\s+test=(\d+);(.*)$/;
my $time = 3600*24*365*3;
$cookie_jar_new->set_cookie(0, 'test', $1, '/', 'www.cookies.org', , 0, 0, $time, 0);
}
$cookie_jar_new->save();
}

__END__

Воля! Заметьте, что в php я не нашел каких-либо готовых модулей или классов. Так что perl рулит, господа, иногда без него никак.