4

Perlの「grep」エミュレーターを拡張するために-r、サブディレクトリでの再帰的検索を可能にするスイッチのサポートを追加しました。コマンドライン呼び出しは次のようになります。

perl pgrep.pl -r <directory> <expression>

と の両方-rdirectory引数はオプションです (ディレクトリのデフォルトは '.' です)。今のところ、最初の引数が正しいかどうかを確認-rし、そうであれば適切なフラグを設定し、シフト操作を使用して残りの 2 つの引数をスキャンします。-rこれが引数リストの最後に表示されたり、さらに悪いことに、ディレクトリ名と検索式の間に表示されたりすると、明らかに問題になります。

-r1 つの回避策は、@ARGV 配列から項目を単純に削除して、残りの引数を単純にシフトインできるようにすることですが、私の奇妙な位置に「undef」を取得せずにそれを行う方法を理解することはできません。配列。あなたが使用した可能性のある提案や別の戦略は大歓迎です.

4

4 に答える 4

21

を使用する必要がありますGetOpt::Long。これにより、説明されているように必要なすべてが実行されます。

于 2009-02-03T15:08:50.667 に答える
4
use Getopt::Std;

our $opt_r; # will be set to its value if used.
getopts('r:'); # -r has an option.
于 2009-02-03T15:30:34.150 に答える
1
  • ディレクトリに-dスイッチを追加します。私の意見では、「コマンドがオプションの場合、それを有効にするためのスイッチが必要です」。
  • また、スイッチ(およびその引数)を読み取るときに配列から削除し、「式」だけを残します。その配列に複数の要素がある場合、誰かが何か間違ったことを書いています。
于 2009-02-03T15:06:19.347 に答える
0

Mastering Perlの「構成」に関する私の章では、perl から-sこれらを処理するための一般的なモジュールまで、コマンドライン スイッチ処理のいくつかの可能性について説明しています。あなたの例では、おそらくGetopt::Stdから始めて、後で必要になった場合はGetopt::Longに変換します。

幸運を、 :)

于 2009-02-11T18:25:34.510 に答える