我试图想办法从@ARGV 中捕获第一个参数,并通过将其与一组已知有效参数进行检查来检查其有效性。我想我可以用一个简单的 foreach 循环来做到这一点,但我意识到这不会起作用,因为当第一个无效匹配返回时它会失败,对于我的示例脚本来说,它是第二个参数。
这里是与问题有关的代码,它的概念脚本所以不多。
my $primary_mode = $ARGV[0];
primary_mode_check($primary_mode);
sub primary_mode_check {
my @program_modes = ('create', 'destroy');
my $selected_mode = shift;
foreach my $mode (@program_modes) {
if ($selected_mode ne $mode) {
die RED "\'$selected_mode\' is not a valid program mode!\n";
}
}
}
还有其他方法可以实现相同的想法吗?我已经在使用 Getopt::Long 和 @ARGV 来实现某种风格。所以我专注于想要完成这项工作。
更新
我在想也许我可以匹配正则表达式,这可能吗?
最佳答案
my $primary_mode = $ARGV[0] or die "No mode provided";
primary_mode_check($primary_mode);
sub primary_mode_check {
my $selected_mode = shift;
my @program_modes = ('create', 'destroy');
die "'$selected_mode' is not a valid program mode!\n"
unless grep { $selected_mode eq $_ } @program_modes;
}
如果您使用 perl 5.10 或更高版本:
use v5.10;
my $primary_mode = $ARGV[0] or die "No mode provided";
my @program_modes = qw(create destroy);
die "'$selected_mode' is not a valid program mode!\n"
unless $primary_mode ~~ @program_modes;
关于perl - 如何将@ARGV 的第一个值与可能的选项数组匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7780579/