• ベストアンサー

perlで、[ \r\n , \n ]の意味は?

シンプルなCGI掲示板の勉強中ですが、 $message =~s/[ \r\n , \n ]/<br \/>/g; となっており、 これは改行文字を<br />に置き換えるのだそうですが、 [ \r\n , \n ]の部分というのはどういった意味でしょうか。 [ abc ]だと、a,b,cのうちどれか1文字は入っていれば良いですよね。 [ ]に「,」が入るとよく分からなくなります。 お分かりの方、教えてくださいませんか。 よろしくお願いいたします。

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

  • ベストアンサー
  • Kirishima
  • ベストアンサー率32% (155/480)
回答No.3

サンプルは、 $message =~ s/\r\n/<br \/>/g; と $message =~ s/\n/<br \/>/g; 1行で済ませようとして間違ってしまったのでしょうか? \r 復帰文字(return) と \n 改行(newline) と 「,」カンマそのもの と \r 復帰文字 (return) のいずれかを<br />に置き換える、という意味になってしまうでしょうね。 この目的のためには、 $message =~ s/\r\n/<br \/>/g; $message =~ s/\r/<br \/>/g; $message =~ s/\n/<br \/>/g; と3行記述するのがいいのではないでしょうか? 参考サイトに私が勉強させてもらっているサイトを紹介しておきます。

参考URL:
http://www.rfs.jp/sitebuilder/perl/04/07.html
cgi_syoho
質問者

お礼

ご指導くださいまして、どうもありがとうございます。 Kirishima様や他の方たちのご説明から判断して、 $message =~ s/\r\n/<br \/>/g; $message =~ s/\r/<br \/>/g; $message =~ s/\n/<br \/>/g; の3行で記述したほうが無難な気がしますね。 ご質問したソースは「CGI/Perl Handbook」の掲示板ソースにありますが、 間違い又は不十分なのですね。 Kentさんの本には、ご説明のソースが載っていました。 ほぼ同じ掲示板でも記述の仕方がいろいろあり、本当に困ってしまいますね。 また機会がありましたら、ご指導いただきたいと思います。 どうもありがとうございました。

その他の回答 (2)

  • bricks
  • ベストアンサー率69% (16/23)
回答No.2

この文の意味が 一般的な改行コード「\r\n」「\n」を XHTMLの改行要素「<br />」に変換する という事でしたらこの文は間違いです。 上の意味の文は $message =~ s/\r?\n/<br \/>/g; となります。 ただし改行コードはMACの「\r」もあるので これでは不充分です。 「\r」も置きかえるようにようにしてください。 [ ]内の「,」はただのコンマです。 なんの意味もありません。

cgi_syoho
質問者

お礼

ご指導いただきまして、どうもありがとうございます。 CGI初心者で、いろんな書籍を購入して勉強していますが、 「改行コード処理」一つをみても、 ソースの記述がいろいろあって、混乱していまいます。 Macの\rにも対応となると、ご質問したソースでは不十分なのですね。 結局一行では全て済ませることができないということになりますね。 大変よくわかりました。どうもありがとうございます。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

実験: % cat a.pl @msgs = ( "ab\ncd\n", "ab\r\nc", "ab\n\r", "ab,c d\n" ); for $message ( @msgs ){ $message =~s/[ \r\n , \n ]/<br \/>/g; print $message, "\n"; } % perl a.pl ab<br />cd<br /> ab<br /><br />c ab<br /><br /> ab<br />c<br />d<br /> ――ということで、「空白」「カンマ」「復帰」「改行」を、<br />に全置換する、で、あっているかと。

cgi_syoho
質問者

お礼

実験データを示してくださいまして、どうもありがとうございます。 大変参考になりました。

関連するQ&A