我有一个接受参数的 Perl 脚本。当我有单值参数时,以下代码就足够了:
switch ($ARGV[0]) {
case "--cmd1" {
$action = "cmd1";
}
case "--cmd2" {
$action = "cmd2";
}
现在,我有一个命令cmd3
有一个参数的情况,如--cmd3=SOMETHING
. 由于SOMETHING
可以变化,简单的开关/外壳不再起作用。基本上,我需要在命令本身上做一个 switch/case。我想我可以使用一个正则表达式,第一个匹配组是命令,第二个是可选的等号。以下内容不起作用,但它说明了我正在尝试做的事情。
$ARGV[0] =~ m/(.*?)(=.*){0,1}/;
my $cmd = $1;
my $equals = $2;
switch ($cmd) {
case "--cmd1" {
$action = "cmd1";
}
case "--cmd2" {
$action = "cmd2";
}
case "--cmd3" {
$action = "cmd3";
print $equals;
}
:::::::::::::::::::::::::::::::::::编辑:::::::::::::: ::::::::::::::::::::::::::::::::::::::::
我想通了,但无论如何我都会给回答赞成票的人并接受。我不能使用 if ,因为这意味着重组一切。这是解决方案。
switch ($ARGV[0]) {
case "--cmd1" {
$action = "cmd1";
}
case "--cmd2" {
$action = "cmd2";
}
case m/--cmd3(=.*)?/ {
$ARGV[0] =~ m/--cmd3(=.*)?/;
$action = "cmd3";
print $1;
}