Perl 如何使用GetOptions检测尾随字符串?

Perl 如何使用GetOptions检测尾随字符串?,perl,getopt,getopt-long,Perl,Getopt,Getopt Long,我是Perl的新手,我正在试图找出Perl脚本解析脚本参数的问题 我有以下名为sample-Perl.pl的Perl脚本: 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_add

我是Perl的新手,我正在试图找出Perl脚本解析脚本参数的问题

我有以下名为sample-Perl.pl的Perl脚本:

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;
}
如果我使用类似(,其中我忘记输入第二个选项)的命令:

如果在末尾有一个额外的字符串,我如何强制它被检测到并显示一个错误

解决方案:

添加此选项至少有助于我的案例:

if(@ARGV){
    //throw error
}

调用
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;
}

调用
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;
}

我忙着回答,我看到现在已经回答了,只是一些额外的信息

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.
}

所以简而言之,

我当时正忙着回答,我看到现在已经回答了,只是一些额外的信息

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.
}

简而言之

检查
scalar@ARGV
?如果
@ARGV>0
命令上的
GetOptions()
未拾取(非选项)参数line@HåkonHæ腺体似乎就是这样。我希望我能接受这个答案:)检查
scalar@ARGV
?如果
@ARGV>0
命令上的
GetOptions()
未拾取(非选项)参数line@HåkonHæ腺体似乎就是这样。我希望我能接受这样一个答案:)如果没有使用
--from
,为什么要打印
错误?这是一种选择。与
--to
相同。但用法明确表示必须是或
die“用法:$0--from NAME--to NAME\n”这告诉我您需要这两个选项。例如,计算从和到的距离。您的答案是正确的,并且被标记为正确的,我只是添加了对我有意义的附加内容:)如果未使用
--from
,为什么要打印
错误
?这是一种选择。与
--to
相同。但用法明确表示必须是或
die“用法:$0--from NAME--to NAME\n”这告诉我您需要这两个选项。例如,计算距离和到的距离。您的答案是正确的,并且标记为正确的,我只是添加了对我有意义的附加内容:)