メールアドレスをテキストファイルから読み取れないのですが
既存のフリーウエアの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」の内容は次のようになっています。
0454329876 DG2GOUd75C2V2 nantoka@jcom.ne.jp 1187785757 1187785757 1187785757 1187785757
031234567 oHMTws.ycIreE namae@home.ne.jp 1187785757 1187785757 1187785757 1187785757
09012340001 aQH3oO85YlTdU denwa@docomo.ne.jp 1187785757 1187785757 1187785757 1187785757
こうして031234567に対応するメールアドレスを表示させようとすると、検索結果は「namae@home.ne.jp」と表示されずに「00」と表示されてしまいます。
でも、ここでCGIで取り出す内容を
$aidhi = $cols[1] if $cols[0] eq "031234567";
と変えると、ちゃんと2項目めの「oHMTws.ycIreE」を表示してきます。
@マークやドットがいけないのでしょうか?
$aidhi の内容に正しくメールアドレスを読み込ませるにはどうしたら良いのでしょう?
だいたい、なぜ読み込んだ結果が「00」とゼロ2つになってしまうのでしょう?
ちなみに、このデータファイルは別の既存CGI(スクリプトゲイトというフリーウエアです)が吐き出すデータベースファイルで、このファイルは既に色々な別のCGIに参照されているのでこのデータファイルのフォーマットを変えるのは極力避けなければなりません。
データファイルがタブ区切りになっているのがいけないのかなと思い、区切り方をカンマにしてCSVで読み込ませてみましたが、結果は変わりませんでした。
解決策のお心当たりのある方はいらっしゃらないでしょうか?
どうかよろしくお願い致します。
お礼
ありがとうございます。その方法をためしてみます。早急にご返答いただき助かります。