トップページphp
1001コメント346KB

Perlコーディング初心者質問スレ Part 38

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/10/07 23:23:08ID:kiEzDCJF
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
045845004/11/01 21:49:58ID:IPrYAMkf
>>450です。
>>456>>457様、ありがとうございます。
教えて頂いたものは負荷も少なく凄いです。

正規表現に疎いためまだ理解できていないのですが…
連番は何個からとかは特に決めていません。
12でも連番のキリ番として扱う予定です。

>>457
$varに数値をいれるとして、$1の部分が理解できません。
これだと例えば1114も連番となってしまいますか?
0459nobodyさん04/11/01 22:11:56ID:???
$1を知りたければ、多少でもいいから正規表現を学ぶんだ
0460nobodyさん04/11/01 22:35:50ID:???
正規表現だとゾロ目は

$x =~ /^(\d)\1*$/

なのでこっちの方がシンプルかも? (最初が数字でその後0個以上の
同じ数字が文字列の最後まで続く)

最低n桁にしたければ*のところを{n-1,}にすればいい。たとえば
最低4桁なら

$x =~ /^(\d)\1{3,}$/

0461nobodyさん04/11/01 22:38:27ID:???
連番は

index("123456789", $x) >= 0

という手もある
0462nobodyさん04/11/01 23:26:45ID:???
セッションハイジャックやSQLインジェクションってどうやって防ぐの?
入力チェックが効果的ってどっかで見た気がするが。
046345004/11/01 23:27:32ID:IPrYAMkf
>>450です。

>>460>>461様ありがとうございます。
正規表現でのゾロ目チェックは参考になりました。
連番でindexを使うのは気付きませんでした。
0464nobodyさん04/11/01 23:32:03ID:???
>>462

Perlコーディング初心者質問スレ Part 38
0465 ◆7CWqH7Oesg 04/11/01 23:32:49ID:???
>>462
マルチだし、ハイジャックて・・・
0466nobodyさん04/11/02 00:52:58ID:???
>>462
セッション管理を必要としない仕様にする。
SQLを必要としない仕様にする。

そもそもセッション管理やSQLを使用しているのか疑問なのだが。
使用しているのならどこが穴になるのか想像できるはず。

ttp://www.atmarkit.co.jp/fsecurity/special/30xss/xss01.html
ttp://www.atmarkit.co.jp/fsecurity/rensai/webhole01/webhole01.html
0467nobodyさん04/11/02 08:25:16ID:s3D5jAc8
Image::Magickで1M以上のJPG画像を縮小しようとしたら
サイズはあっているのですが画像の上の10%くらいで変換がおわってあとは真っ黒になります
なにが原因なのでしょうか

use Image::Magick;
$i = Image::Magick->new;
$i->Read('test.jpg');
$i->[x]->Scale("200");
$i->Write("temp.jpg");
0468nobodyさん04/11/02 09:46:11ID:???
途中で殺されたんじゃねーの
046946204/11/02 10:19:20ID:???
あれ、俺マルチなんかしてねーぞ?
0470nobodyさん04/11/02 10:35:00ID:???
>>467
よくわからんが、Scale メソッドってそういう呼び出し方するんだったっけ
047146704/11/02 10:55:21ID:MX3i4yL1
use Image::Magick;
$i = Image::Magick->new;
$i->Read('test.jpg');
$i->Resize(width=>200, height=>150, blur=>0.7);
$i->Write("temp.jpg");
これも駄目でした
0472nobodyさん04/11/02 11:55:28ID:???
まじめにエラーハンドリングしてみたら?
なんか出てるかもよ。

ttp://www.imagemagick.org/www/perl.html#erro
0473nobodyさん04/11/02 14:27:15ID:???
正規表現の修飾子を変数に入れたまま
使う事は出来ないんでしょうか?

foreach(@list){
 if(/$pattern/$a){
  print "true";
 }else{
  print "false";
 }
}

正規表現を勉強しようと、
CGIで正規表現と複数の文字列をPOSTし、
文字列がマッチするか検証するスクリプトを書いています。
0474nobodyさん04/11/02 14:46:21ID:???
>>473
eval使え

0475nobodyさん04/11/02 15:02:49ID:???
>>474
出来ました。ありがとうございます。

if(eval "/$pattern/$a"){}
0476nobodyさん04/11/02 18:01:53ID:???
みんなならどっちにする?

$a=4 if $b;
$b=5 if $b;



if($b){
$a=4;
$b=5;
}

なんか{}(ブロック)をなくす方が処理が早いみたいなこと聞いて
こんなつまらないことで悩んでる状況。
0477nobodyさん04/11/02 18:19:17ID:???
ご教授ください。

その月が何日が最終日なのかを調べるほうほうは
どのようにつくればいいのでしょうか?
0478nobodyさん04/11/02 18:22:06ID:???
ツェラーの公式で検索してみ
0479nobodyさん04/11/02 18:41:26ID:???
>>476
それがものすごい回数繰り返されるループの中とかなら、
ベンチとって選べ。

そうでなければどうせ誤差ぐらいしか違わないから自分が
見やすいと思うほうにしとけ。

一般論としては、動くの作って動作速度に不満が出てから
プロファイラでどこが時間食ってるか調べて集中的に直せ、
と言われているようだ。

軽くベンチした感じでは、$bがfalseならif(){}の方が
3倍ぐらい早いが、$bがtrueなら25%ぐらい遅い。
0480nobodyさん04/11/02 18:52:04ID:???
sub last_day {

my($y,$m) = (shift,shift);
my @days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

return 0 unless (1 <= $m and $m <= 12 );

$m-- == 2
? $days[$m] + ($y % 4 == 0) - ($y % 100 == 0) + ($y % 400 == 0)
: $days[$m];
}
048147604/11/02 19:28:42ID:???
>>479さん
神様のような方ですね。
ありがとうございました。
10回程度なので見やすいほうにさせていただきます。
0482nobodyさん04/11/02 21:02:59ID:???
($a,$b)=(4,5) if $b;
も、べんちまぁくしてねぇ(はぁと)
0483nobodyさん04/11/02 21:03:44ID:???
>>476
それだと条件分岐の評価が2回行なわれるので、
条件式次第では遅くなる可能性があるよ。

$a=4, $b=5 if $b;
$b and $a=4, $b=5;
($a,$b)=(4,5) if $b;
$b &&= 5 and $a = 4;

労力の割にはたいした効果が期待できないので、
最適化のためにblockを消したりとかは、した事ないけど。
0484nobodyさん04/11/02 22:26:47ID:???
日本時間、2004年11月2日午後10時を示す数字
04110222

をGMTで同じように8桁で表したいのですが、どの様にするのが
よいのでしょうか?

一旦、unix timeにして、-9時間して、戻すのが順当でしょうか?
できれば、use Time::Localはしたくありません。
(それが使えない環境などがありそうなため)

perl JST GMT でググってもTZとかしかでてきませんでした。
よろしくお願いします。


0485nobodyさん04/11/02 22:27:49ID:???
2chの各スレッドのURLってどういう計算式なんですか?日付が絡んでそうなのはわかるのですが
だれかおしえてくらさい
                       ↓ここの部分
http://pc5.2ch.net/test/read.cgi/php/1097158988/l100
0486nobodyさん04/11/02 22:31:43ID:???
unixtime
0487nobodyさん04/11/02 22:49:38ID:???
ありがとうございました。
0488nobodyさん04/11/03 00:48:07ID:???
変数から特定の文字列がある場合、それを抜き取るという
動作をしたいんですが、これはどうすればいいでしょうか?
index と substr を使う方法を思いついたのですが、
もっとスマートな関数とかありますでしょうか?
0489nobodyさん04/11/03 00:52:38ID:???
age
0490nobodyさん04/11/03 01:26:52ID:???
>>488
if(/特定の文字列/){
  $unko = $1;
}
0491nobodyさん04/11/03 06:51:50ID:???
>>490
抜き取られていない。

push @result,$1 while s/(特定の文字列)//;
とかいろいろ。
0492nobodyさん04/11/03 07:37:05ID:???
PerlでPHPのgetImageSizeみたいなのないですか?
特にSWFのサイズ取得とかあるサブルーチンあったら教えてくださいませ
0493nobodyさん04/11/03 07:42:15ID:???
>>484
あとは自分で何とかしる。

$_ = '04110222';
my @a = /(..)/g;
my @m = qw/31 28 31 30 31 30 31 31 30 31 30/;
$m[1]++ unless $a[0] % 4;
my $t = 946652400 + 3600 * ($a[3] + 24 * int $a[2] - 1 + 365 * $a[0] + (3 + $a[0]) / 4);
$t += 86400 * $m[$_] for 0..$a[1] - 2;
print scalar localtime $t;
0494nobodyさん04/11/03 12:14:21ID:???
>>492
この辺だったか。
http://search.cpan.org/~ysas/SWF-File-0.37/lib/SWF/File.pm
0495nobodyさん04/11/03 13:27:44ID:???
>>484
Time::Localってperl本体に付属してたと思ってたんだけど、
分離されたんだっけ?

あとGMTにするのはgmtime使うかtimezoneいじるべきで
unix timeを9時間戻すのはよろしくないと思うよ。
0496nobodyさん 04/11/03 15:09:23ID:???
ユリウス時間でも出してきたらどない?
0497nobodyさん04/11/03 15:24:21ID:???
>>495
> GMTにするのはgmtime使うかtimezoneいじるべきで
漏れもそう思うが、

> unix timeを9時間戻すのはよろしくないと思うよ。
これには何か理由があるのか?
049848404/11/03 15:46:43ID:???
色々返答ありがとうございました。
質問の仕方が悪かったかもです。

どうやらgoogle君に聞いてみると、Time::Localは標準ライブラリらしいです。
なのでどの環境いっても使えそうです。
重くなりそうという根拠のない理由から、できれば避けたいと書きました。
#標準ライブラリということを確定的できる情報元ってないんでしょうか…

何をしたいかというと、
0411031500という時間をcookieのexpire時間にしたいのですが、cookieではGMT
でJSTを指定できないらしいので変換をしなくてはならないのです。

>>493さんのコードちょっとむずかしすぎてまだ理解できてないです…
以下のURLのサブルーチンでunix timeにはできそうです。
http://www.ybi.co.jp/koike/qa3000/qa3165.htm
0499nobodyさん04/11/03 15:56:35ID:???
use Object; $obj->document();
http://perl.infoware.ne.jp/documents.html
0500nobodyさん04/11/03 16:07:16ID:???
>>497
うるう秒が間に入るとずれるから。ちゃんとサポートされたシステム
での話しだけど。

クッキーのexpire時間ぐらいならそう厳密じゃなくていいから
構わんと思うけどね。
0501nobodyさん04/11/03 16:41:00ID:???
>>498
5.8.4の標準ライブラリなら
http://www.perldoc.com/perl5.8.4/lib.html

確実に知りたいのなら
perldoc perlmodlib
050249704/11/03 16:41:31ID:???
>>500
d
0503nobodyさん04/11/03 16:55:54ID:???
標準ライブラリだからといって必ず使えるという保障はないわけで。
あんまりこだわる必要はないと思うけど?

それよりも、なぜにcookieのexpireで人間的日付を元にするのかが気になる。
単純に timeから30日間有効 とかにしてしまえば楽なのに。
0504nobodyさん04/11/03 17:10:11ID:???
>>494
情報ありがとう!
やはり1つの関数で勝手にファイル判別してくれるとかはないんですかね?
まぁ手動で見分けて条件分岐すればいいんでしょうけども・・・。
0505nobodyさん04/11/03 17:12:48ID:???
2chで出てるようなIDを生成したいんですが、2chがどうやって生成してるのか教えて頂けないでしょうか?
前に、そういうサブルーチンを見かけた気がするんですが検索しても見つかりませんでした。
よろしくお願いします。
0506nobodyさん04/11/03 17:13:59ID:???
>>505
crypt
0507nobodyさん04/11/03 17:17:55ID:???
>>506
いやそれは分かるんですがcryptの元の文字列をどうしてるのか知りたいのです。
0508nobodyさん04/11/03 17:24:01ID:???
>>507
確かホスト名と日付だったとおもう
0509nobodyさん04/11/03 18:31:44ID:???
>>500
なるほど、4年に一度狂う位なら問題なさそうなので、unix timeにして-9時間に
しようかと思います。

標準ライブラリは、導入されていなかったり、過去のバージョンであるかわからない
とのことなのでやっぱり使わないほうが無難な気がするので使わない方向でいきます。

>>503
なぜ、人間的日付かというと、その時間になったら掲示板に投稿できなくなるという
改造を自分でして、読みやすいから0411031700みたいな形で設定ファイルに保存
するという形をとったからです。
ここから間違いかもしれませんが…unix timeで保存した方が良かったのかもしれませんね。
#やっぱり見やすいからそうしました。
0510nobodyさん04/11/03 19:20:15ID:???
>>508
それだけだと、総当りでIPアドレス算出できるから、日ごとに更新される乱数が使われてる。
0511nobodyさん04/11/03 19:27:43ID:???
>>505
ここを探してみそ。
http://age.s22.xrea.com/talk2ch/

# 正しいID算出方法かどうかの保障はないけど。

>>504
見つけたら是非とも報告よろしくー。
051250504/11/03 21:07:28ID:???
>>511
やりたいことができました。
本当にありがとうございました。
0513nobodyさん04/11/03 22:16:22ID:???

トリップの作り方はわかったのですが、
                              ↓ここのIDはどうやって作るんでしょうか?
356 :Now_loading...774KB :04/11/03 21:01:50 ID:j7+5/dK/
誰かよろしくお願いします。
0514nobodyさん04/11/03 22:19:10ID:???
>>513
>>511のリンク先読めねーの?
0515nobodyさん04/11/04 00:33:21ID:???
配列の数を吐き出す奴ない?length(@xx)とかやってもだめだった。
0516nobodyさん04/11/04 00:43:00ID:???
>>515
スカラーコンテクストなら@xxは配列の要素数になる。
わからなければscalar(@xx)としとけば確実。
0517nobodyさん04/11/04 00:44:14ID:???
>>515
$#xx+1
またはscalar
0518nobodyさん04/11/04 00:56:38ID:???
>>517
$#xxは$[変えるとそれにつれて変わるので(要素数-1)として
使うのは危険だと習った。

$[ = 1;
@xx = (1,2);
print $#xx+1;

$[をいじったスクリプトなんて書いたことないけどね。
0519nobodyさん04/11/04 01:03:20ID:???
scalarでいいじゃん
052051504/11/04 01:27:14ID:???
みんなありがd
052151504/11/04 03:06:36ID:???
sub内だけで使用する変数ってlocal($hensuu)って宣言するんだっけ?
0522nobodyさん04/11/04 03:30:18ID:???
my
0523nobodyさん04/11/04 03:51:59ID:???
>>521
調べる気ないな・・・
0524nobodyさん04/11/04 11:55:35ID:3xCNLIZD
特定のページからの来訪の場合のみ、
処理させたいんですが、この場合環境変数とif文使えばいいんでしょうか?
052552404/11/04 11:56:51ID:???
あ、これだとノートンとか入れてる人には無効になってしまいますね。
0526nobodyさん04/11/04 12:48:50ID:???
あるプログラムからpostでID/PASSを送るプログラム作ってるんだけど、
ブラウザに丸見えになりますよね?
で、一応暗号化はしたんですけど、例えばネットカフェに
データが残ってて、解析されたら終わりってことですよね・・・
う〜んどうすればいいものか。
他のスクリプトはどうやっているんでしょ?
0527nobodyさん04/11/04 12:54:01ID:???
<form action="$url">
<input type="text" name="url" value="">
</form>
上記のようにアクション先にその場で入力された
URLを指定することってできるでしょうか?
0528nobodyさん04/11/04 13:30:32ID:???
>>527
Javascript使ってしか無理だと思うけど。
0529nobodyさん04/11/04 13:31:47ID:???
>>527
じゃばすく
053052704/11/04 13:40:32ID:???
javascriptを使用しない場合は不可能でしょうか?
053152704/11/04 13:41:16ID:???
perlを使った方法はないでしょうか?
053252604/11/04 13:52:12ID:???
POSTとGET以外に変数を別のスクリプトに渡す方法ってあるでしょうか?
0533nobodyさん04/11/04 13:53:10ID:???
>>531
もう少しWebの仕組みを(略
0534nobodyさん04/11/04 14:45:41ID:???
できないこともないけど、スマートじゃないな
0535nobodyさん04/11/04 15:18:06ID:???
>>534
教えてくださいませ
0536nobodyさん04/11/04 15:34:22ID:???
>>532
「変数を」別のスクリプトに渡す
ということは、foo.cgi->Browser->bar.cgiの過程で
foo.cgiが出力した値をbar.cgiに渡したいということか?
053752604/11/04 15:46:07ID:???
>>536
はい、そのとおりです。
0538nobodyさん04/11/04 15:51:48ID:???
ちょと似た質問なんだけれど、
海外で手に入れた会員管理の有料perlプログラムを使ってるんですが、
http://****.com/****.cgi?password=***** みたいな感じで
ログが残って、ログアウトしたあとも、ブラウザの戻るとかで
会員画面に入れるんだが、
詐欺プログラムですか、これは?
perlのことあまり詳しくありませんが、これなんとかする方法ありますか?
0539nobodyさん04/11/04 15:57:04ID:???
>>538
作成者に聞くのがスジってものでしょう
0540nobodyさん04/11/04 16:03:30ID:???
>>537
そういうセッション管理で一般的に使われるのはCookieだな。
Passは最初の認証だけ使って、後はセッションIDをCookieへ入れといて、
ワンタイムパスワードをPOSTさせて認証処理・・・って感じになるのかな。
本なんかをちょっと見ただけで実際に作ったこと無いから、落とし穴があるかも。
Cookieは気をつけないとPOST以上に危険だから注意

あと、
>ブラウザに丸見えになりますよね?
の一言が気になるんですが、まさかtype="hidden"を知らないなんてことは・・・
0541nobodyさん04/11/04 22:34:38ID:???
unko
0542nobodyさん04/11/05 00:12:53ID:???
>>537
ActivePerl入れて、インターネットゾーンでも使えるようにレジストリ緩めれば、language=perlで好きなことできるよ。

そんな糞ページ誰も見ないがな。
0543nobodyさん04/11/05 01:23:41ID:???
>>542
あなたもクソページですね
0544nobodyさん04/11/05 04:30:09ID:127p6d3j
スクリプトに引数を付けることで処理を色々に分岐させようとしています。

例:-a、-l、-h、-v、-r、<引数なし>を引数とする。
現在、引数を見て処理させる場合、
if ($#ARGV == "0") {
if ($ARGV[0] eq "-a") { 処理1; }
elsif ($ARGV[0] eq "-l") { 処理2; }
elsif ($ARGV[0] eq "-h") { 処理3; }
elsif ($ARGV[0] eq "-v") { 処理4; }
elsif ($ARGV[0] eq "-r") { 処理5; }
else { &error; }
}
elsif ($#ARGV == "1") {
if ($ARGV[0] eq "-a" && $ARGV eq "-l") { 処理5; }
elsif ($ARGV[0] eq "-l" && $ARGV eq "-h") { 処理6; }
elsif ($ARGV[0] eq "-h" && $ARGV eq "-v") { 処理7; }
elsif ($ARGV[0] eq "-v" && $ARGV eq "-r") { 処理8; }
elsif ($ARGV[0] eq "-r" && $ARGV eq "-a") { 処理9; }
else { &error; }
}
などとしていますが、引数が増えるとそれだけ組み合わせも増えるわけで
現在引数による分岐だけで混乱しています。しかもこのスクリプトを実際に
使用する場合、引数の順序も固定されてしまうので、表現力が乏しくなります。

それぞれの引数に数字を割り当てて、それをfor (@ARGV)で見ていって
それらを加算した結果で処理させる方法などを考えましたが、
数字を割り振るコツも分かりません。

引数や、それらの組み合わせが増えたとき、どういう風に対処すれば
分かりやすく、作りやすいスクリプトが書けるのでしょうか。

よろしくお願いします。
054554404/11/05 04:39:45ID:127p6d3j
上の例文は間違いです。

正しくは以下の通り。

if ($#ARGV == "0") {
if ($ARGV[0] eq "-a") { 処理1; }
elsif ($ARGV[0] eq "-l") { 処理2; }
elsif ($ARGV[0] eq "-h") { 処理3; }
elsif ($ARGV[0] eq "-v") { 処理4; }
elsif ($ARGV[0] eq "-r") { 処理5; }
else { &error; }
}

elsif ($#ARGV == "1") {
if ($ARGV[0] eq "-a" && $ARGV[1] eq "-l") { 処理5; }
elsif ($ARGV[0] eq "-l" && $ARGV[1] eq "-h") { 処理6; }
elsif ($ARGV[0] eq "-h" && $ARGV[1] eq "-v") { 処理7; }
elsif ($ARGV[0] eq "-v" && $ARGV[1] eq "-r") { 処理8; }
elsif ($ARGV[0] eq "-r" && $ARGV[1] eq "-a") { 処理9; }
else { &error; }
}
0546nobodyさん 04/11/05 04:46:45ID:???
>>544
引数をハッシュに代入してexistsで条件分離したら?

for(@ARGV){
  $param{$_} = '1'; #値自体はなんでもいい。
}
分岐は
if(exists $param{'-a'}){ 処理1;}
とか
if($param{'-a'} == 1){ 処理1;}

みたいの。
0547nobodyさん04/11/05 06:55:34ID:???
>>544
my %table = (
'a' => sub{ print "処理1" },
'l' => sub{ print "処理2" },
...
'r' => \&r_part,
'al' => \&r_part,
'hl' => sub{ print "処理6" },
...
);

sub r_part{ print "処理5" }

my $key = join('', sort @ARGV);
if (exists $table{$key}){
$table{$key}->();
} else {
print "ERROR";
}
054854704/11/05 07:02:16ID:???
おっと、ハイフン取り除く処理を忘れてたーよ。
0549nobodyさん04/11/05 07:51:54ID:???
>544
getoptとか、そんなのはダメ?
http://www.aplawrence.com/Unix/perlgetopts.html
055054404/11/05 10:39:14ID:T3r+ugEG
ああ、寝てしまった間にこんなにレスが付いてる!
ありがとう御座います!

ぱっと見た感じでは
>>546さんと>>547さんは同じ処理ですか?
連想配列にこういう使い方があったと知って、眼から鱗の初心者です>私
両方を試してみます。ありがとうございます。

>>549
煩雑な徒手作業のところをできる限り自動化/半自動化していく積もりで
ゆくゆくはこうしたモジュールを有り難く使った方が効率が良いとは考え
ているのでこういう助言は本当に助かります。
ありがとうございます。

早速実験してみます。

ありがとう御座いました。
0551nobodyさん04/11/05 11:05:29ID:vXdBVIeu
スクリプトいじってたら
正規表現で
s/ //g;
とやっても空白がマッチしなくなりました
s/\s//g;
ならマッチします
原因と元に戻す対処法を教えてください
055255104/11/05 11:19:18ID:vXdBVIeu
自己解決しました
0553nobodyさん04/11/05 11:36:35ID:vAMAiFLG
間違えてPHP質問スレに書き込んでしまったのでこちらで質問しなおします。

ttp://tohoho.wakusei.ne.jp/wwwperl2.htm
こちらのsocket関数の項目に書かれているスクリプトを自分の
スクリプトに組み込んでますが
自分の使っているサーバーでperl -wcでスクリプトチェックを行ったら
Unquoted string "stdout" may clash with future reserved word at aaa.cgi line 543.
このような警告文が表示されました。
select(stdout);
のstdoutをAAAとか別のものに置き換えたらこの警告文が回避できましたが
別のものに置き換えても正常に動くのでしょうか?
perlのバージョンはThis is perl, v5.8.2 built for i386-freebsdです。
0554nobodyさん04/11/05 11:56:32ID:???
select(STDOUT);
055555304/11/05 12:26:44ID:vAMAiFLG
>>554
どうも有り難うございます。
stdoutをそのまま大文字にしても動くんですね
0556nobodyさん04/11/05 13:45:35ID:uR92YhZO
現在CGIでのアクセス制限サイトを作っているのですが、
アドレス欄にIDとパスワードが表示され、
そのIDとパスワードを含んだアドレスを入力すると、
ログが記録されないのです。
(cgiの認証画面から入力するときちんと記録されます)

ログ記録はこんな感じなのですが。。。
どこか間違っているのでしょうか

sub record {
local($date,$time,$agent,@data);

# 時間&ホスト取得
$date = &get_time;
$time = time;
&get_host;

# ロック開始
&lock if ($lockkey);

# ログファイルの読み込み
open(IN,"$prvdir/$logfile") || &error("Open Error: $logfile");
@data = <IN>;
close(IN);

# ブラウザ情報
$agent = $ENV{'HTTP_USER_AGENT'};
$agent =~ s/&/&/g;
$agent =~ s/</</g;
$agent =~ s/>/>/g;
$agent =~ s/"/"/g;
0557556続き04/11/05 13:45:59ID:uR92YhZO

# ログ更新
while ($max <= @data) { pop(@data); }
unshift(@data,"$in{'id'}<>$date<>$host<>$agent<>$time<>\n");
open(OUT,">$prvdir/$logfile") || &error("Write Error: $logfile");
print OUT @data;
close(OUT);

# ロック解除
&unlock if ($lockkey);
}
■ このスレッドは過去ログ倉庫に格納されています