ホーム > Perl > コマンドラインオプションを解析するPerlモジュールGetopt::Compact

コマンドラインオプションを解析するPerlモジュールGetopt::Compact

Perlでコマンドラインオプションを解析する場合、大体は標準添付されているGetopt::Longを使うと思いますが、自分は3年前ぐらいから Getopt::Compact というモジュールに出会い、それ以降大抵の場合はこれを使っています。このモジュールの良いところは

  • オプションの定義(-c, –config などの定義)とそのヘルプメッセージが一箇所で定義できる
  • -h, –helpオプションを最初から定義してくれてる(–manオプションも)
  • 定義してないオプションが指定されると自動的にエラーにしてくれる
  • Getopt::Compact#usage でヘルプメッセージが簡単に取得できる

があると思っています。などと抽象的な話をしてもしょうがないので、具体的なコードを書いてみます。

#!/usr/bin/env perl
 
use strict;
use warnings;
use Getopt::Compact;
use Data::Dumper;
 
my $getopt = Getopt::Compact->new(
    name => 'getopt_compact.pl',
    modes => [ qw(verbose) ],
    args => 'FILE',
    version => '0.1',
    struct => [
        [ [ qw(f force) ], 'force overwrite of output file and compress links' ],
        [ [ qw(l level) ], 'compress level', '=i' ],
        [ [ qw(S suffix) ], 'use suffix on compressed files', '=s' ],
    ]
);
 
my $options = $getopt->opts;
my $file = shift @ARGV;
unless ($file) {
    print STDERR $getopt->usage;
    exit 1;
}
 
print "options -----\n";
print Dumper $options;

上の例では gzip のオプションのモノマネで

  • -f, –forceというフラグオプション
  • -l, –levelという数値のオプション
  • -S, –suffixという文字列のオプション
  • オプション以外に引数FILEを受け取る

という仕様としています。

でで、例えば

$ perl getopt_compact.pl --help

と実行すると

getopt_compact.pl v0.1
usage: getopt_compact.pl [options] FILE
options                                                          
-h, --help      This help message                                
-v, --verbose   Verbose mode                                     
-f, --force     Force overwrite of output file and compress links
-l, --level     Compress level                                   
-S, --suffix    Use suffix on compressed files                   
    --man       Display documentation

のようにヘルプが表示されます。また、–hoge のような存在しないオプションを指定すると

$ perl getopt_compact.pl --hoge
Unknown option: hoge
getopt_compact.pl v0.1
usage: getopt_compact.pl [options] FILE
options                                                          
-h, --help      This help message                                
-v, --verbose   Verbose mode                                     
-f, --force     Force overwrite of output file and compress links
-l, --level     Compress level                                   
-S, --suffix    Use suffix on compressed files                   
    --man       Display documentation

のようにエラーになりヘルプが表示されます。

という感じで、Getopt::Longより依存モジュールがあるものの便利に使わせてもらってます。ただ、PerlのGetopt系のモジュールは他にも色々あるのでもっと便利なのがありそうですが、こういうのもあるよという紹介でした。

モダンPerl入門 (CodeZine BOOKS)

著者/訳者:牧 大輔

出版社:翔泳社( 2009-02-10 )

大型本 ( 344 ページ )


こちらもあわせてどうぞ


カテゴリー: Perl タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。