- ベストアンサー
文字列比較の仕方が分からない?Perlで文字列比較の方法を学ぼう!
- Perlを使ってフォームから入力された文字列をデータファイル内で検索し、重複していなければ追加登録したい場合、どのようにすれば良いのでしょうか?重複していた場合には登録できないようにする方法も知りたいです。
- 昨日からPerlを始めたばかりで基礎的な部分がよくわからないため、間違っている部分が多々あるかもしれません。Perlのエキスパートの方にご教示いただけると幸いです。
- データは全て"["から始まっているため、登録できないようにするための簡単な入力チェックも実装したいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> while($line=<IN>){ <> (ダイヤモンド演算子) では、改行コードも含めて入力されます。 よって、 $line = "でーた\n" としたような状態になっています。 $data にはformから入力したので、改行コードは付いていません。 これでは絶対に一致しません。 while($line=<IN>){ chomp $line ; if ( $line eq $data ) { $flag = 1; } } という感じに、chomp関数を使うなど、改行コードを削除するのが,Perlでの常套手段です。 あとは、細かいことになりますが > open(IN , "<:uft8" , "data.dat"); 戻り値を確認して、エラーのときは、適切な処理をするようにしましょう。 > open(OUT,">>data.dat"); INでは3引数で使ってるのですから、OUTの方も3引数使っては? エラー処理も入れましょう。 ただ、このままだと、同時にアクセスがあったときに、不具合が発生する可能性があります。 「perl 排他制御」で検索して、調べてください。 今回の場合だったら '+<' で読み書き用でopen→flock等の排他処理→読み込み→(closeはしない)→seekで末尾に→追記→close というのが常套手段でしょう。 > print "Content-Type: text/html; charset=UTF-8\n"; > print "$data $pr<br>\n"; HTTPのヘッダは、空行で区切りです。\nで改行するなら、\n\nと改行だけの行が必要です。 その後もHTMLとしては変ですが、それはとりあえず置いておきます
お礼
色々とご指摘ありがとうございました。勉強になりました。 重複登録も無事に判別できるようになり解決しました。 次は検索のプログラムを頑張ってみようと思います。