変数の表示の仕方(改行の扱い)
perl初心者です。よろしくお願いします。
ひとつの変数で、print関数での表示とテキストエリアでの表示を
しようとしているのですが、改行の扱いに困っています。
テキストエリアで<br>を表示させないようにすると、print関数の
方の改行がなくなるし、print関数の方に改行させると、テキスト
エリアで<br>が表示されるし・・・。
print関数で改行、テキストエリアでは<br>が出ずに改行という
風にしたいのですが、どなたかご教授していただけませんか?
よろしくお願いします。
#!/usr/local/bin/perl
use strict;
#データファイル
my $datafile='./data.dat';
#ライブラリの読み込み
require './jcode.pl';
my $input;
#フォームデータの読み込み
if ($ENV{REQUEST_METHOD} eq "POST"){
read (STDIN,$input,$ENV{CONTENT_LENGTH});
}else{
$input=$ENV{QUERY_STRING};
}
#フォームデータのデコード
my %form = ();
my @pairs = split(/&/, $input);
foreach my $pair ( @pairs ){
my( $name, $value ) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
#SJISコード変換
&jcode::convert(\$value, 'sjis');
$value =~ s/\r\n/<br>/g;
$value =~ s/\r/<br>/g;
$value =~ s/\n/<br>/g;
$form{$name} = $value;
}
#データのオープン
open(DAT,"+<$datafile");
flock(DAT, 2);
#ファイル読み込み
my $line = <DAT>;
for ( split /\t/ , $line ) {
my( $key , $value ) = $_ =~ /^([^=]*)=(.*)$/;
#フォームデータの上書き
$form{$key} ||= $value;
}
#データの書き込みとクローズ
seek(DAT,0,0);
$line = '';
while (my($key,$value) = each %form) {
$line .= "${key}=${value}\t";
}
print DAT $line;
close(DAT);
&header;
print $form{A};
print "<br>";
print $form{B};
print "<br>";
print $form{C};
print "<br>";
print <<EOM;
<b>[内容確認]</b>
<form action="new.cgi" method="POST">
<INPUT TYPE="text" SIZE="27" name="A" value="$form{A}"><br>
<INPUT TYPE="text" SIZE="90" name="B" value="$form{B}"><br>
<TEXTAREA name="C" ROWS="2" COLS="27">$form{C}</TEXTAREA><br>
<input type="submit" value="上記内容で送信">
</form>
<br>
</body>
</html>
EOM
exit;
#-----------------------------------------------------------------------------------
# HTMLヘッダー
#-----------------------------------------------------------------------------------
割愛
お礼
かっこはいらないのですね。勉強になりました。ありがとうございます!