• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl cgiでnameを)

Perl CGIでフォームからの入力を受け取る際に発生するエラーの解消方法

このQ&Aのポイント
  • Perl CGIを使用してフォームからの入力を受け取る際に、name属性の値が正しく受け取られないエラーが発生しています。
  • 現在のコードでは、name属性の値に変数を結合する際に不正な文字列が生成されてしまっています。
  • 正しい名前を受け取るためには、name属性の値に変数を結合する際に、シングルクォーテーションを使用する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.2

print文にダブルクォートで囲った文字列を渡すと、囲まれた範囲内で変数を展開してくれ、それ以外は文字列としてそのまま出力します。 なので、ドットとシングルクオートは文字列としてそのまま出力されます。 一方、$in_data{$key . '_' . $linepnt} の場合は変数とシングルクオートで囲まれた文字列を . 演算子で結合する処理になります。 もしprint文の中でやりたいのであれば print "name=\"${key}_${linepnt}\" "; のように書いていけば解決します。

nagaon
質問者

お礼

詳細なご回答ありがとうございます。ダブルクオートの中では、変数は展開されるけれども、演算はされずに、「.」は文字列として出力されるという点、よくわかりました。よくわからないのは、print文の中で name=\'test1_' . $linepnt\" と書いた場合に、ただしくname=test1_7 というように解釈してくれたことです。'test1_'7という文字列として解釈されるはずだと思うのですが。。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

print の中で「 . '_' . 」とドットとシングルクオートを入れているからでしょう。

nagaon
質問者

お礼

ありがとうございました。print文の前で、 my $name = $key . '_' . $linepnt; として $nameを作ったうえで、これをprint 文に入れるとうまくいきました。しかし分からないのは、 $in_data{$key . '_' . $linepnt} はそうしなくてもうまくいったのは、どうしてでしょうか。。。

関連するQ&A