0

while(<>)ループを使用したフィルタリングのような基本的な awk を実行するスクリプトがあります。スクリプトで使用状況とバージョンを表示できるようにしたいのですが、それ以外の場合はすべての引数がファイルであると想定しています。getopt と <> 演算子を組み合わせるにはどうすればよいですか?

4

3 に答える 3

3

他の人が言及したように、Getopt::Longが推奨されるモジュールです。Perl 3.x から存在しています。

多くのオプションがあり、構文に慣れるまでに時間がかかる場合がありますが、それはまさにあなたが望むことを行います:

use strict;
use warnings;
use Getopt::Long;
use feature qw(say);
use Pod::Usage;

my ( $version, $help );   #Strict, we have to predeclare these:

GetOptions(
   'help'    => \$help,
   'version' => \$version,
) or pod2usage ( -message => "Invalid options" );

それだけです。サブルーチンが実行されると、Getoptionsコマンド ライン (配列) を解析して、または@ARGVで始まるものを探します。それらを処理し、それ自体が 2 つのダッシュ、またはダッシュで始まらないオプションのいずれかになると、それらがファイルであると見なし、処理が完了します。その時点で、すべてのオプション文字列 (およびそのパラメーター) が配列からシフトされ、ファイルが残ります。---@ARGSV

if ( $help ) {
    pod2usage;
}
if ( $version ) {
    say "Version 1.23.3";
    exit;
}

while ( my $file = <>) {
    ...
}

Getopts::Longは標準の Perl インストールの一部であるため、いつでも利用できるはずです。

これらのモジュールは標準の Perlではないと考えているため、多くの人がこれらのモジュールの使用に慎重であることは知っていますが、これらのモジュールは、printや などのコマンドと同じくらい Perl の一部ですchomp。Perl には 500 以上のテンプレートが付属しており、それらを自由に使用できます。

于 2013-08-14T22:09:27.963 に答える