プロが教えるわが家の防犯対策術!

既存のフリーウエアのCGIを改造して、フォームから送信されたメールアドレスを元に、それに対応する社員番号をテキストファイルから読み込んで、入力されたアドレス宛にメールするCGIを作ろうとしてます。
しかし、テキストファイルに確かに存在するメールアドレスをCGIが見つけてくれていないみたいなので、CGIがデータファイルをどう読み込んでいるのか確認するために以下のような別の簡単なCGIを動かしてみました。
(私はPerlの知識はかなり浅いので、この簡単なテスト用CGIはこのサイトで見つけたソースを元に作らせて頂いたものです)

#!/usr/local/bin/perl
print "Content-Type: text/plain\n\n";
my $file = 'data/member.usr'; # 読み込むファイル名
open(my $fd, $file); # ファイルを開く
foreach (<$fd>) { # 以下1行ずつ読み込み
my @cols = split("\t", $_); # タブで分割して配列へ
$aidhi = $cols[2] if $cols[0] eq "031234567"; # 1項目めが該当の電話番号ならなら$aidhiはこの行の3項目めの内容
}
close($fd); # ファイルを閉じる
print $aidhi, "\n";

そして、データファイル「member.usr」の内容は次のようになっています。

0454329876DG2GOUd75C2V2nantoka@jcom.ne.jp1187785757118778575711877857571187785757
031234567oHMTws.ycIreEnamae@home.ne.jp1187785757118778575711877857571187785757
09012340001aQH3oO85YlTdUdenwa@docomo.ne.jp1187785757118778575711877857571187785757

こうして031234567に対応するメールアドレスを表示させようとすると、検索結果は「namae@home.ne.jp」と表示されずに「00」と表示されてしまいます。
でも、ここでCGIで取り出す内容を
$aidhi = $cols[1] if $cols[0] eq "031234567";
と変えると、ちゃんと2項目めの「oHMTws.ycIreE」を表示してきます。
@マークやドットがいけないのでしょうか?
$aidhi の内容に正しくメールアドレスを読み込ませるにはどうしたら良いのでしょう?
だいたい、なぜ読み込んだ結果が「00」とゼロ2つになってしまうのでしょう?

ちなみに、このデータファイルは別の既存CGI(スクリプトゲイトというフリーウエアです)が吐き出すデータベースファイルで、このファイルは既に色々な別のCGIに参照されているのでこのデータファイルのフォーマットを変えるのは極力避けなければなりません。

データファイルがタブ区切りになっているのがいけないのかなと思い、区切り方をカンマにしてCSVで読み込ませてみましたが、結果は変わりませんでした。

解決策のお心当たりのある方はいらっしゃらないでしょうか?
どうかよろしくお願い致します。

A 回答 (1件)

Linux環境ですが、


コピペして、member.usrのスペースをタブに置き換えて(コピペなので、スペースになってしまうので)、
動かしたら、きちんと動きました。。。

疑わしいのは、member.usrですね。
バイナリダンプで見て、余計なコードが入っていませんか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
バイナリエディタって、テキストファイルの内容をチェックするのにも使えるって知りませんでした。
おっしゃる通り、テキストエディタでは表示されない黒点のコードが2つ入っていました!
これの正体がわからないので、「eq」でなく「$aidhi = ~ m/abc@xxx.ne.jp/」で「このメールアドレスを含む場合」という抽出方法で切り抜けることにしました。

おかげさまで助かりました。
どうもありがとうございました!

お礼日時:2007/08/29 16:21

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