ログの一部を消すPerlを考えています。

ここではソースを短くするために、ログの一部を消し去って
ログファイルに上書きするデータは $deta だけだとすると


open F, '+<a.log';
flock F,2;
$deta = <F>;//実際はここでもっと処理
truncate F,0;
seek F,0,0;
print F $deta;
close F;


と、


open IN, 'a.log';
flock IN,2;
open OUT, '>a.log';
flock OUT,2;
$deta = <IN>;//実際はここでもっと処理
print OUT $deta;
close OUT;
close IN;


の2つを考えました。
上のように 読み込み と 書き込み を同時にやった方がいいのか
下のように分けてやった方がいいのか教えてください。

ロックは flock を使って、普通レベルのロックが
できるぐらいでいいと思っているんだけど、
この flock の書き方でおかしいところがあれば
教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

 何を基準にいいか悪いか決めればいいんでしょうか?(^_^;


 好みの問題だからどっちでもいいと思いますが。
 速度的には前者ですが、あとで見たとき分かりづらいので初心者の方には後者を薦めています。

 ちなみに flock はプラットフォームによって使えないこともあるので、

eval { flock(); };

 としておいた方がいいでしょう(使い方に特に問題はありません)。
    • good
    • 0
この回答へのお礼

eval { flock(); }; は知りませんでした。
ありがとうございます。

お礼日時:2001/11/01 20:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QKEEP OUT log機能がつかえない。

お世話になります。
直リンク防止のため、KEEP OUTというCGIを使っています。
http://cgiroom.nu/list/level_up/keepout/index.htm
このスクリプトはlog機能があるのですが、うまく動作できません。
作者へ問い合わせしたいのですが、リンクが切れていて問い合わせできないため、こちらへ質問投稿しました。
お願いします。

Aベストアンサー

うまく動かないとはどのような症状でしょうか。
test.cgi
にアクセスした時の画面にエラーが表示されていれば記述して下さい。

Q@town = ("Aタウン","Bタウン","Cタウン");

@town = ("Aタウン","Bタウン","Cタウン");


上のような配列の値を、テキストファイルに保存して読み込みたいのですが、どうしたらよいのか分かりません。

誰か詳しい方、よろしくお願いします。

Aベストアンサー

use Storable qw(nstore retrieve);

my @towns = qw(TownA TownB TownC);
my $file = 'serialize.dat';
nstore( \@towns, $file ) || die "$file:$!";
@towns = ();

my $towns_ref = retrieve($file) || die "$file:$!";
print $_, $/ for @{$towns_ref};

Q$ENV{'REMOTE_HOST'}について

CGIにて$ENV{'REMOTE_HOST'}を取得したところ
スパム投稿なのですが、$ENV{'REMOTE_HOST'}が
IPアドレスの値である142.54.182.186が入っていました。
普通はkd182249232116.au-net.ne.jp
などという形になると思うのですが
142.54.182.186
となっていることが通常ありえるのでしょうか?
リモートホストを取得し、IPアドレスの形式であった場合、
この投稿者を弾いてしまっても問題ありませんか?

Aベストアンサー

IPアドレスが入っているか、ホスト名が得られるかは、Apacheの設定によります。
ホスト名を得る設定になっていてもDNSの逆引きがその時たまたま失敗すると、IPアドレスのまま設定されます。
なので、「ホスト名が入っていたら儲けもの」くらいの感覚で扱うのがよいかと。

Q$abc == 0;

フリ-CGIを使ってCGIの勉強中です、
今使っているフリ-CGI掲示板の中に下記のコ-ドがあります、
$abc == 0;

$abc = 0; の間違いだと思うのですが別の意味があるのですか。

Aベストアンサー

こんにちは。

cgiの勉強中ということですが。
質問される前に本などごらんになりましたか??
どういったことから間違いだと思うのでしょうか??

$abc == 0;
は間違いではありません。
==と=の違いをご存知ですか??

$abc == 0;
は「$abcが0である」
$abc = 0;
は「$abcに0を代入する」
ということです。

参考URL:http://tohoho.wakusei.ne.jp/www.htm

Q$ENV{'QUERY_STRING'}以外で引数を取得するには?

CGI上で$ENV{'QUERY_STRING'}を使用しないで引数を取得するにはどうしたらいいのでしょうか?

hoge.cgi?XXXX の XXXX を取得したいのですがある理由によって$ENV{'QUERY_STRING'}が使用できません。

よろしくお願いいたします。

Aベストアンサー

hoge.cgi?xxxx ではなく、
hoge.cgi/xxxx という表記のURIが許されるなら、
$ENV{'PATH_INFO'}を使う方法があります。


おすすめ情報