セッションファイルの削除
mixiでみつけたサンプル。CGI::Session使う上では必要だろう。
- CGI::Session のドライバにFile, IDジェネレータに MD5 を利用している前提です。
- 他のドライバや、IDジェネレータを使っている場合は書き換える必要があります。
- $sessdirの設定は適宜書き換えてください。
- unlinkに失敗したときのフォローがないのでその辺が気になれば加えてください。
※2008-01-26、コメントで指摘を受けて、明確なエラーを修正。シミケイさん、ありがとうございました。
#!/usr/bin/perl use strict; use warnings; # セッションファイルを置いているディレクトリを指定 my $sessdir = '/home/userdir/sessdir'; opendir(SESSDIR, $sessdir); while (my $sess = readdir(SESSDIR)) { if ($sess =~ /^cgisess_[0-9a-f]{32}$/) { my $file = qq|$sessdir/$sess|; my $days = -M $file; # 最終更新から1日以上経っているセッションファイルを削除 # 1日より短く指定したい場合は小数点でもOK $days > 1 and unlink $file; } } closedir(SESSDIR); exit;
Class::DBIあれこれ
とてつもなく便利なモジュールだが、デフォルトで使うとちょっと困った点が。
データベースハンドルの扱いのことだ。しかしテキストを見るとできないこともないようだ。
方策としては、
- Class::DBIが握りこんでいるハンドルをどっかから取って来る。
- あらかじめ作ったデータベースハンドルをClass::DBIにも使わせる。
のどちらかだ。
1は、もしかしたら、Class::DBI->db_Mainで取り出せるのかも。
2は、set_dbを行わずに、データベースハンドルを返すdb_Mainメソッドを作ればいいのかも。
ちょっと実験してみよう。
さらに注意点。本来アリウベカラザル状況だが、テーブルのカラム名にSQLの予約語を使うと、さしものClass::DBIもずっこける。つうか、そもそも予約語をカラム名にするなと。orz
ちなみにどの単語が予約語になるかは、RDBM毎に違うので注意が必要ってか、最初から使わなければいいので気にする必要がない。orz
実験してみた。
イメージとしては、こんな感じのスクリプト。
use DBI my $dbh = DBI->connect(...); use Class::DBI; Class::DBI->set_db('Main', ...); my $c = Class::DBI->db_Main; use Data::Dumper; print Data::Dumper->new([$dbh, $o], ['dbh', 'o'])->Dump();
すると結果は。
$dbh = bless( {}, 'DBI::db' ); $o = bless( {}, 'DBIx::ContextualFetch::db' );
……は? 「DBIx::ContextualFetch::db」って、何?
CPANでさがす。すると。
DBIx::ContextualFetch - Add contextual fetches to DBI - metacpan.org
こういうものだとわかった。
んで、ソース自体も確認してみると、DBI関係のサブクラスで、主にexecuteやfetchを上書きするものようだ。execute一つでbind_paramとbind_colの二つが実行でき、fetchはスカラーコンテキストでは配列へのリファレンスを返し、配列コンテキストでは配列を返す。そんな感じである。
本来の動作はさまたげないようになっているようなので、2の方策は使わない方がいいだろう。
そしてググる過程でPerlの汚染モードに苦戦 - libnitsuji.soなんてものも見つけて勉強になりますはい。
電脳麻薬ハンター (ハヤカワ文庫SF)
- 作者: ウィリアムシャトナー,斎藤伯好
- 出版社/メーカー: 早川書房
- 発売日: 1991/01
- メディア: 文庫
- クリック: 5回
- この商品を含むブログ (4件) を見る
まあ、内容はともかく。この作者が問題だ。
知っている人は知っている、カーク船長役の俳優さんなのだ。小説も書くのかよっ!と暖かくツッコミを入れたいところ。
そして描写されている世界では、日本人が悪役なのである。
まず、最大の悪役の名前が、「ソニー・ホコリ」。ホコリはどうやら「誇り」のことらしい。「誇り」=Pride=高慢の罪と言う連想だろうか。そして日本人なら名前は当然ソニーさ! orz
最初の電脳麻薬は京都大学で作られたらしい。なんで?
キャラクターが濃いので、ウィリアム・ギブスンみたいな読みづらさはないのがありがたい。てか、エンターテイメントだなあ。ロボ娘も魅力的だし。
ただ、あのオチだけはいただけませんでしたな。
そして、続きがあるみたいなエピローグなんだけど、続きが出たとは聞かないのですよ。残念。
追記
GHOST BREAKER - 業務日誌によると、やっぱり別に中の人がいたようで。
超時空世紀オーガス
- 作者: 井上敏樹,スタジオぬえ
- 出版社/メーカー: 小学館
- 発売日: 1993/12
- メディア: 文庫
- クリック: 2回
- この商品を含むブログ (1件) を見る
- 作者: 井上敏樹,スタジオぬえ
- 出版社/メーカー: 小学館
- 発売日: 1993/12
- メディア: 文庫
- クリック: 2回
- この商品を含むブログ (1件) を見る
あーあーそういやそんな話だったねと思い出すのに最適。
ただ、われらがロボ娘モームの扱いが最後、アニメ版と違うのがちょっとズッコケ。オチがないじゃんそれ!
まあ、ラストは同じだったんだけどさ。てか、どうなったのかわからない村上エンド。
正直、コレクターズアイテム。
セッションファイルの削除
mixiでみつけたサンプル。CGI::Session使う上では必要だろう。
- CGI::Session のドライバにFile, IDジェネレータに MD5 を利用している前提です。
- 他のドライバや、IDジェネレータを使っている場合は書き換える必要があります。
- $sessdirの設定は適宜書き換えてください。
- unlinkに失敗したときのフォローがないのでその辺が気になれば加えてください。
※2008-01-26、コメントで指摘を受けて、明確なエラーを修正。シミケイさん、ありがとうございました。
#!/usr/bin/perl use strict; use warnings; # セッションファイルを置いているディレクトリを指定 my $sessdir = '/home/userdir/sessdir'; opendir(SESSDIR, $sessdir); while (my $sess = readdir(SESSDIR)) { if ($sess =~ /^cgisess_[0-9a-f]{32}$/) { my $file = qq|$sessdir/$sess|; my $days = -M $file; # 最終更新から1日以上経っているセッションファイルを削除 # 1日より短く指定したい場合は小数点でもOK $days > 1 and unlink $file; } } closedir(SESSDIR); exit;
Class::DBIあれこれ
とてつもなく便利なモジュールだが、デフォルトで使うとちょっと困った点が。
データベースハンドルの扱いのことだ。しかしテキストを見るとできないこともないようだ。
方策としては、
- Class::DBIが握りこんでいるハンドルをどっかから取って来る。
- あらかじめ作ったデータベースハンドルをClass::DBIにも使わせる。
のどちらかだ。
1は、もしかしたら、Class::DBI->db_Mainで取り出せるのかも。
2は、set_dbを行わずに、データベースハンドルを返すdb_Mainメソッドを作ればいいのかも。
ちょっと実験してみよう。
さらに注意点。本来アリウベカラザル状況だが、テーブルのカラム名にSQLの予約語を使うと、さしものClass::DBIもずっこける。つうか、そもそも予約語をカラム名にするなと。orz
ちなみにどの単語が予約語になるかは、RDBM毎に違うので注意が必要ってか、最初から使わなければいいので気にする必要がない。orz
実験してみた。
イメージとしては、こんな感じのスクリプト。
use DBI my $dbh = DBI->connect(...); use Class::DBI; Class::DBI->set_db('Main', ...); my $c = Class::DBI->db_Main; use Data::Dumper; print Data::Dumper->new([$dbh, $o], ['dbh', 'o'])->Dump();
すると結果は。
$dbh = bless( {}, 'DBI::db' ); $o = bless( {}, 'DBIx::ContextualFetch::db' );
……は? 「DBIx::ContextualFetch::db」って、何?
CPANでさがす。すると。
DBIx::ContextualFetch - Add contextual fetches to DBI - metacpan.org
こういうものだとわかった。
んで、ソース自体も確認してみると、DBI関係のサブクラスで、主にexecuteやfetchを上書きするものようだ。execute一つでbind_paramとbind_colの二つが実行でき、fetchはスカラーコンテキストでは配列へのリファレンスを返し、配列コンテキストでは配列を返す。そんな感じである。
本来の動作はさまたげないようになっているようなので、2の方策は使わない方がいいだろう。
そしてググる過程でPerlの汚染モードに苦戦 - libnitsuji.soなんてものも見つけて勉強になりますはい。
電脳麻薬ハンター (ハヤカワ文庫SF)
- 作者: ウィリアムシャトナー,斎藤伯好
- 出版社/メーカー: 早川書房
- 発売日: 1991/01
- メディア: 文庫
- クリック: 5回
- この商品を含むブログ (4件) を見る
まあ、内容はともかく。この作者が問題だ。
知っている人は知っている、カーク船長役の俳優さんなのだ。小説も書くのかよっ!と暖かくツッコミを入れたいところ。
そして描写されている世界では、日本人が悪役なのである。
まず、最大の悪役の名前が、「ソニー・ホコリ」。ホコリはどうやら「誇り」のことらしい。「誇り」=Pride=高慢の罪と言う連想だろうか。そして日本人なら名前は当然ソニーさ! orz
最初の電脳麻薬は京都大学で作られたらしい。なんで?
キャラクターが濃いので、ウィリアム・ギブスンみたいな読みづらさはないのがありがたい。てか、エンターテイメントだなあ。ロボ娘も魅力的だし。
ただ、あのオチだけはいただけませんでしたな。
そして、続きがあるみたいなエピローグなんだけど、続きが出たとは聞かないのですよ。残念。
追記
GHOST BREAKER - 業務日誌によると、やっぱり別に中の人がいたようで。
超時空世紀オーガス
- 作者: 井上敏樹,スタジオぬえ
- 出版社/メーカー: 小学館
- 発売日: 1993/12
- メディア: 文庫
- クリック: 2回
- この商品を含むブログ (1件) を見る
- 作者: 井上敏樹,スタジオぬえ
- 出版社/メーカー: 小学館
- 発売日: 1993/12
- メディア: 文庫
- クリック: 2回
- この商品を含むブログ (1件) を見る
あーあーそういやそんな話だったねと思い出すのに最適。
ただ、われらがロボ娘モームの扱いが最後、アニメ版と違うのがちょっとズッコケ。オチがないじゃんそれ!
まあ、ラストは同じだったんだけどさ。てか、どうなったのかわからない村上エンド。
正直、コレクターズアイテム。
セッションファイルの削除
mixiでみつけたサンプル。CGI::Session使う上では必要だろう。
- CGI::Session のドライバにFile, IDジェネレータに MD5 を利用している前提です。
- 他のドライバや、IDジェネレータを使っている場合は書き換える必要があります。
- $sessdirの設定は適宜書き換えてください。
- unlinkに失敗したときのフォローがないのでその辺が気になれば加えてください。
※2008-01-26、コメントで指摘を受けて、明確なエラーを修正。シミケイさん、ありがとうございました。
#!/usr/bin/perl use strict; use warnings; # セッションファイルを置いているディレクトリを指定 my $sessdir = '/home/userdir/sessdir'; opendir(SESSDIR, $sessdir); while (my $sess = readdir(SESSDIR)) { if ($sess =~ /^cgisess_[0-9a-f]{32}$/) { my $file = qq|$sessdir/$sess|; my $days = -M $file; # 最終更新から1日以上経っているセッションファイルを削除 # 1日より短く指定したい場合は小数点でもOK $days > 1 and unlink $file; } } closedir(SESSDIR); exit;
Class::DBIあれこれ
とてつもなく便利なモジュールだが、デフォルトで使うとちょっと困った点が。
データベースハンドルの扱いのことだ。しかしテキストを見るとできないこともないようだ。
方策としては、
- Class::DBIが握りこんでいるハンドルをどっかから取って来る。
- あらかじめ作ったデータベースハンドルをClass::DBIにも使わせる。
のどちらかだ。
1は、もしかしたら、Class::DBI->db_Mainで取り出せるのかも。
2は、set_dbを行わずに、データベースハンドルを返すdb_Mainメソッドを作ればいいのかも。
ちょっと実験してみよう。
さらに注意点。本来アリウベカラザル状況だが、テーブルのカラム名にSQLの予約語を使うと、さしものClass::DBIもずっこける。つうか、そもそも予約語をカラム名にするなと。orz
ちなみにどの単語が予約語になるかは、RDBM毎に違うので注意が必要ってか、最初から使わなければいいので気にする必要がない。orz
実験してみた。
イメージとしては、こんな感じのスクリプト。
use DBI my $dbh = DBI->connect(...); use Class::DBI; Class::DBI->set_db('Main', ...); my $c = Class::DBI->db_Main; use Data::Dumper; print Data::Dumper->new([$dbh, $o], ['dbh', 'o'])->Dump();
すると結果は。
$dbh = bless( {}, 'DBI::db' ); $o = bless( {}, 'DBIx::ContextualFetch::db' );
……は? 「DBIx::ContextualFetch::db」って、何?
CPANでさがす。すると。
DBIx::ContextualFetch - Add contextual fetches to DBI - metacpan.org
こういうものだとわかった。
んで、ソース自体も確認してみると、DBI関係のサブクラスで、主にexecuteやfetchを上書きするものようだ。execute一つでbind_paramとbind_colの二つが実行でき、fetchはスカラーコンテキストでは配列へのリファレンスを返し、配列コンテキストでは配列を返す。そんな感じである。
本来の動作はさまたげないようになっているようなので、2の方策は使わない方がいいだろう。
そしてググる過程でPerlの汚染モードに苦戦 - libnitsuji.soなんてものも見つけて勉強になりますはい。
電脳麻薬ハンター (ハヤカワ文庫SF)
- 作者: ウィリアムシャトナー,斎藤伯好
- 出版社/メーカー: 早川書房
- 発売日: 1991/01
- メディア: 文庫
- クリック: 5回
- この商品を含むブログ (4件) を見る
まあ、内容はともかく。この作者が問題だ。
知っている人は知っている、カーク船長役の俳優さんなのだ。小説も書くのかよっ!と暖かくツッコミを入れたいところ。
そして描写されている世界では、日本人が悪役なのである。
まず、最大の悪役の名前が、「ソニー・ホコリ」。ホコリはどうやら「誇り」のことらしい。「誇り」=Pride=高慢の罪と言う連想だろうか。そして日本人なら名前は当然ソニーさ! orz
最初の電脳麻薬は京都大学で作られたらしい。なんで?
キャラクターが濃いので、ウィリアム・ギブスンみたいな読みづらさはないのがありがたい。てか、エンターテイメントだなあ。ロボ娘も魅力的だし。
ただ、あのオチだけはいただけませんでしたな。
そして、続きがあるみたいなエピローグなんだけど、続きが出たとは聞かないのですよ。残念。
追記
GHOST BREAKER - 業務日誌によると、やっぱり別に中の人がいたようで。
超時空世紀オーガス
- 作者: 井上敏樹,スタジオぬえ
- 出版社/メーカー: 小学館
- 発売日: 1993/12
- メディア: 文庫
- クリック: 2回
- この商品を含むブログ (1件) を見る
- 作者: 井上敏樹,スタジオぬえ
- 出版社/メーカー: 小学館
- 発売日: 1993/12
- メディア: 文庫
- クリック: 2回
- この商品を含むブログ (1件) を見る
あーあーそういやそんな話だったねと思い出すのに最適。
ただ、われらがロボ娘モームの扱いが最後、アニメ版と違うのがちょっとズッコケ。オチがないじゃんそれ!
まあ、ラストは同じだったんだけどさ。てか、どうなったのかわからない村上エンド。
正直、コレクターズアイテム。