Greple Version 9

Significant update planned in the next release.

Version 9

次のアップデートでメジャー番号を 9 に上げて、互換性を失うものも含めて いくつかの仕様変更を検討しています。CPAN にプレリリースしたので、もし 興味のある方は次のようにインストールしてください。

cpanm App::Greple@9.00_01

–may オプションと –le パターン中の ? の取り扱い

これまで、–le に与えるパターンの中で ? マークは –or オプショ ンと同等に扱われていました。しかし、この記法は、自分でも今まで実用的に 使ったことがありません。複数の選択肢を指定するのであれば正規表現を使っ た方が簡単だし直感的だからでしょう。?foo ?bar より foo|barの方が早 いしわかりやすい。自分でも使ったことがないくらいなので、おそらく世界中 で誰も使ってないと思います。

そこで、新たに –may オプションを導入し、? マークはその意味を与 えることにします。–may の省略形は -t です。t は tentative の 略で、辞書を引くと「暫定的な」「不確定の」「自信なさげな」「不確かな」 というような意味です。

–may に指定したパターンは必須ではありませんが、もしあればハイライ トされて表示されます。これまでも –must オプションを指定すると、そ れ以外のパターンが同様になくてもいいものとして扱われました。これを明示 的に指定するためのオプションが –may ということになります。

–must/-r オプションと + マークも今まで通り使うことはでき るので、非必須パターンを指定するのに2種類の方法ができたことになります。 以下の4種類の記法は、いずれも同じ意味になります。

greple -e foo -e bar -t baz
greple -r foo -r bar -e baz

greple " foo  bar ?baz"
greple "+foo +bar  baz"

-r–t の両方を使用することはあまり想定していませんが、こう 書いても同じだし、ある意味曖昧さがなくてわかりやすいとも言えます。

greple -r foo -r bar -t baz
greple "+foo +bar ?baz"

全部を使った場合には、-t が優先的に処理され、それ以外のパターンは すべて必須となり、次の2つも上の4つと同じ意味になります。bar がどっち になるのかわかりにくいので、お勧めはしません。

greple -r foo -e bar -t baz
greple "+foo bar ?baz"

後方互換性について

–may オプションの新設は問題ないとして、パターン中の ? の意味を 変えてしまうのは互換性を大きく損なう仕様変更です。しかし、最初に書いた ように、この機能を使っている利用者は一人もいないだろうという仮定の元に 強行しようと考えています。

別の文字を使うという方法もあります。たとえば ~* にすれば ?の 解釈を変える必要はありません。しかし、以前はパターンの一部として認識さ れていた文字の解釈を変えることは、やはり互換性を損なう仕様変更です。

であれば、元々特殊な意味を持っていて、誰も使っていなかった文字を使う方 が影響は少ないような気がします。なにより、この機能を与えるのに ?より ふさわしい文字を思いつかないというのが最大の理由でもあります。

--or オプションの廃止

上の変更にともなって、--or オプションを廃止します。元々? マークと の対称性のために導入したもので、おそらくこれも利用者はいないのではない かと考えています。

--or "foo bar" --or "yabba dabba"

のような使い方をしている場合も、

-e "foo bar|yabba dabba"

と書けば同じ意味になります。

たくさんのパターンを列挙して、いずれかにマッチしたい場合には、パターン を1行ずつファイルに格納して -f オプションで指定することができます。 -f を使った場合は、それぞれのファイル毎にグループ化されます。