perl - 如何将@ARGV 的第一个值与可能的选项数组匹配

标签 perl foreach command-line-arguments

我试图想办法从@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/

相关文章:

linux - setuid 处的不安全 ENV 变量

arrays - PowerShell foreach 如何跳过最后一个元素

xslt - 使用<xsl:for-each>作为增量元素名称

c# - 将命令行参数传递给单一服务

perl - 如何lcfirst每组单词?

Android Eclipse 使用外部工具在代码上运行脚本

excel - 对每个使用工作表引用

gcc - gcc -E 选项代表什么?

c++ - 如何查询正在运行的进程的参数列表? ( window ,C++)

Perl内存分配