2011-07-02 11 views
4

多くのPerlチュートリアルでは、GetOptionsユーティリティを使用して、期待されるコマンドライン引数のみを処理し、それ以外の場合は適切なメッセージで終了する方法について説明しています。GetOptionsユーティリティを使用してPerlで 'オプションの'コマンドライン引数を処理する方法は?

私は、のように、

  • -z zip_dir_pathをオプションのコマンドライン引数を以下している私の要件に

    は:ヘルプを表示:出力

  • -hを圧縮します。

私にはうまくいかなかったGetOptionsといくつかの組み合わせを試しました。
私の質問は:どのようにこの要件を処理するためにGetOptionsを使用するのですか?

EDIT:-zニーズ 'zipディレクトリーパス'

EDIT2: 私のスクリプトがある強制コマンドライン引数以下:

  • -in input_dir_path:入力ディレクトリ
  • -out output_dir_path:出力ディレクトリ

ここに私のコードです:

my %args; 
GetOptions(\%args, 
"in=s", 
"out=s" 
) or die &usage(); 

die "Missing -in!" unless $args{in}; 
die "Missing -out!" unless $args{out}; 

このEDITはより明確になります。

+3

通常、あなたは 'GetOptions'を呼び出し、最後にどのスイッチが使われたかを調べます。たぶんあなたは何が起こっているのか、そして何が問題なのかを明確にするためにいくつかの試みを含めるべきでしょう。 –

+0

@muが短すぎます:質問文を更新しました。コメントありがとうございました。 – TheCottonSilk

答えて

9

A : (colon)は、オプションの選択肢を示すために使用することができます:ドキュメントから

#!/usr/bin/env perl 

use strict; 
use warnings; 

use Getopt::Long; 

my ($zip, $help, $input_dir, $output_dir); 

GetOptions(
    'z:s' => \$zip, 
    'h'  => \$help, 
    'in=s' => \$input_dir, 
    'out=s' => \$output_dir, 
); 
+0

「:」は、コマンドラインスイッチの文字列値がオプションであることを示すために使用でき、スイッチ自体がオプションであることを示すためではありません。私は正しい? – TheCottonSilk

+0

はい、そうです。 –

+0

私は '@Alan Haggai Alavi'の答えを受け入れましたが、GetOptionsがユーザが提供するオプションをリストするのに使用され、スクリプトはそれに従ってさらに引数を処理しなければならないという彼のコメントで' @mu is too short'と同意します必要。 – TheCottonSilk

2

1または0の値は、コマンドラインで取得する入力引数に基づいて、$zip_output$show_helpの値に設定する必要があります。

use strict; 
use warnings; 

use Getopt::Long; 

my $zip_output; 
my $show_help; 

GetOptions("z" => \$zip, "h" => \$show_help); 
+0

@ 'チューダー・コンスタンタン':質問文を更新しました。答えてくれてありがとう。 – TheCottonSilk

3

: type [ desttype ] 
     Like "=", but designates the argument as optional. If omitted, an 
     empty string will be assigned to string values options, and the 
     value zero to numeric options. 

あなたはそれを指定して空の文字列をチェックした場合、あなたはどれを知っていますユーザーは指定しませんでした。

関連する問題