• ベストアンサー

perlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。 sub tttt { my @out = @_; for (@out) { s/^\s+//; s/\s+$//; } return wantarray ? @out : $out[0]; このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。 分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

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

  • ベストアンサー
  • secretd
  • ベストアンサー率39% (50/126)
回答No.1

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします. 「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります. 次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します. したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に, 「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします. 置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです. 次に, wantarray ですが, http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です. 呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

fortunefeeling
質問者

お礼

とても分かりやすい説明ありがとうございます。 仰るとおり置換構文sについては事前に調べがついておりました。本当にありがとうございました。助かりました。

その他の回答 (1)

  • hara_peko
  • ベストアンサー率28% (11/38)
回答No.2

既に的確な回答が出ていますので、リファレンス本をお薦めしておきます。unicode や 標準モジュールに関する事以外であればだいたい間に合うと思います。

参考URL:
http://www.7andy.jp/books/detail?accd=30527064
fortunefeeling
質問者

お礼

情報ありがとうございます!

関連するQ&A