以下のサブルーチンの細かい動きを終えてください。

オライリー社の「CGIプログラミング」のP131~132に書かれています。

このサブルーチンに渡された全ての行を調べて、
最小のインデントを探し、
全ての行からその最小インデントを取り除いているらしいです。
とくに「sort」の部分がよくわかりません。

sub uni {
local $_ = shift;
my ($indent) = sort /^([ \t]*)\s/gm;
s/^$indent//gm;
return $_
}

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/05/29 11:55:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:GEN111 No.1

回答回数472ベストアンサー獲得回数58

ポイント60pt
sub uni {
  local $_ = shift ;
  # $_ に引数を取り込み

  my ($indent) = sort /^([ \t]*)\s/gm ;
  # 正規表現に g 指定子が付いて左辺値(sort の引数)がリストなので
  # カッコにマッチした部分(インデント ~先頭の空白~ より一文字少ないもの)をリストにして返す

  # sort はリストを並び換えて返す
  # インデントがスペースだけなら文字数が少ない順番に返す

  # my ($indent) はカッコ付きなのでリスト
  # 中身は $indent ひとつだけなのでリストの先頭 (一番短いもの) を受けとる

  s/^$indent//gm ;
  # 各行の先頭から $indent を削除

  return $_ ;
  # 結果を返す
}

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません