作者: dune
日時: 2002/10/14(21:58)
極悪です。

dune さんの [TSperl:178] Re: cgi でファイルをロックしたい から
>>もし自分でロックするとしたら flock を使う以外でどういう方法
>>があるのでしょうか。

いろいろありましたが、収束に向かっています。

ハッシュの要素をファイルに結びつける Yuki:YukiWikiDB2 を書き
ました。ハッシュの内容がファイルに保存されているので、perl 
を終了しても、次回起動時にまた同じ値を参照できます。掲示板 c
gi なんかに便利だと思います。

読み出すときは共有ロック、書き込むときは排他ロックします。オ
プションを指定するとハッシュに書き込む際にバックアップをとる
ようになります。このバックアップを利用して、ひとつ前と今のデ
ータとの間で差分を求めることができます。

http://homepage1.nifty.com/dune/YukiWikiDB.html?

にアップしたので、興味のある人、バグを見つけてやろうって人は
どうぞ。

--^test1.pl
#!/usr/local/bin/perl
use strict;
use Yuki::YukiWikiDB2;
my $dbname      = 'testtest';
my($key,$val)   = @ARGV;
if(defined $val){
    # 書き込み(排他ロック)
    my $db  = tie(my %db,Yuki::YukiWikiDB2=>$dbname,2,1)    or die;
    $db{$key}   = $val;
    print $db->diff($key);
    untie %db;
}elsif(defined $key){
    # 読み出し(共有ロック)
    my $db  = tie(my %db,Yuki::YukiWikiDB2=>$dbname,1,1)    or die;
    print $db{$key},"\n";
    untie %db;
}else{
    my $db  = tie(my %db,Yuki::YukiWikiDB2=>$dbname,1,1)    or die;
    print $db->sort_by_mtime;
    untie %db;
}
--$


実行例
>D:%perl test1.pl 山 時間をかけて変わるもの
>
>D:%perl test1.pl 空 目に見えないもの
>
>D:%perl test1.pl 空 目に見えるもの
>-"目に見えないもの"
>+"目に見えるもの"
>
>D:%perl test1.pl 山
>時間をかけて変わるもの
>
>D:%
-- 
FZH01112@..., http://homepage1.nifty.com/dune/