「1 while s///」とはなにか?
1 while $wk =~ s/\([^()]*\)//g; # 関数系を弾く
これは、SQLのSelect文の選択項目のところに以下のような関数が使用された場合、それ弾いています。
select MAX(ISNULL(aa,'0')) AS bb from aabb_tbl
「1 while s///」の説明は、以下にありました。
ここで,「1 while s///」というのは,「while (s///) {1}」と書くのと等しいです。
http://www.bi.a.u-tokyo.ac.jp/~mizuki/personal/Research/PerlOneLiner.html
置換(s///)は成功すれば置換した数(この場合1)を,失敗すれば0を返すので,上の例では置換が成功する限り{ }の中の「1」を実行し続けます。実際には「1」は実行しても何も起こりません。
なので,「1 while s///」は置換ができる限りはそれを続け,置換ができなくなればそれで終了する,という関数になります。
たとえば、以下の場合などに使います。
入れ子を許した括弧内を削除する
http://www.din.or.jp/~ohzaki/regex.htm#RemoveNestedParen
1 while $str =~ s/\([^()]*\)//g;
まず、正規表現括弧パターン「\([^()]*\)」をNULL置換した後に、whileで再帰的にそれを行い、マッチしなくなるとwhileを抜ける。