2017-04-06 17 views
0

私はPerlを初めてお使いになり、Perlスクリプトの解析スクリプト引数に問題がないかどうかを調べようとしています。GetOptionsを使用して末尾の文字列を検出する方法?

私は、次のPerlスクリプトと呼ばれるsample-perl.plあります

perl sample-perl.pl --from nyc lon 
Output will be: nyc 

use strict; 
use warnings; 
use 5.010; 
use Getopt::Long qw(GetOptions); 

my $source_address; 
my $dest_address; 

GetOptions('from=s' => \$source_address, 
      'to=s' => \$dest_address) or die "Usage: $0 --from NAME --to NAME\n"; 
if ($source_address) { 
    say $source_address; 
} 

if ($dest_address) { 
    say $dest_address; 
} 

をそして私は(私は2番目のオプションを入力し忘れた)のようなコマンドを使用している場合

最後に追加の文字列がある場合、それが検出され、代わりにエラーが表示されるように強制する方法はありますか?

ソリューション:

これは、少なくとも私の場合を助ける追加:

if(@ARGV){ 
    //throw error 
} 
+0

チェック 'スカラーの@ ARGV'で? '@ARGV> 0'の場合は、コマンドラインでGetOptions()によって取り出されない引数(非オプション)が –

+1

@HåkonHæglandのように見えます。私は答えを受け入れることができればいいと思っています:) – abhishek

+0

も参照してください 'perldoc Pod :: Usage' – toolic

答えて

1

GetOptionsを呼び出した後、@ARGVアレイ内の任意の残りのコマンドラインオプションを確認してください。これは、予期しない引数がすべてエラーを生成すると仮定しています。

use strict; 
use warnings; 
use 5.010; 
use Getopt::Long qw(GetOptions); 

my $source_address; 
my $dest_address; 

GetOptions('from=s' => \$source_address, 
      'to=s' => \$dest_address) or die "Usage: $0 --from NAME --to NAME\n"; 

@ARGV and die "Error: unexpected args: @ARGV"; 

if ($source_address) { 
    say $source_address; 
} 

if ($dest_address) { 
    say $dest_address; 
} 
+1

ありがとうございます。私の問題を解決します。 – abhishek

1

私は忙しいと答えています。

use strict; 
use warnings; 
use 5.010; 
use Getopt::Long qw(GetOptions); 

my $source_address; 
my $dest_address; 

GetOptions('from=s' => \$source_address, 
     'to=s' => \$dest_address) or die "Usage: $0 --from NAME --to NAME\n"; 

@ARGV and die "To many arguments after --from or --to : @ARGV "; 

if ($source_address) { 
say $source_address; 
} else { 
say "Error: No Source specified"; #Check to see if --from is actually specified, else print error. 
} 

if ($dest_address) { 
say $dest_address; 
} else { 
say "Error: No destination specified"; #Check to see if --to is actually specified, else print error. 
} 

短いので

+0

'--from'が使用されていない場合、なぜ' Error'を出力しますか?それはオプションです。 '--to'と同じです。 – toolic

+0

ですが、具体的には "die"でなければなりません。使用法:$ 0 - NAMEから - NAME \ n ";"これは両方のオプションが必要であることを示しています。例えば、からの距離の計算のように。 –

+0

あなたの答えは正しかったので、私はちょうど私に理にかなった追加のものを追加しました:) –

関連する問題