- ベストアンサー
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~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。 分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします. 「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります. 次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します. したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に, 「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします. 置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです. 次に, wantarray ですが, http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です. 呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.
その他の回答 (1)
- hara_peko
- ベストアンサー率28% (11/38)
既に的確な回答が出ていますので、リファレンス本をお薦めしておきます。unicode や 標準モジュールに関する事以外であればだいたい間に合うと思います。
お礼
情報ありがとうございます!
お礼
とても分かりやすい説明ありがとうございます。 仰るとおり置換構文sについては事前に調べがついておりました。本当にありがとうございました。助かりました。