我有一个接受参数的Perl脚本。当我有单值参数时,以下代码就足够了:
switch ($ARGV[0]) {
case "--cmd1" {
$action = "cmd1";
}
case "--cmd2" {
$action = "cmd2";
}
现在,我有一个命令cmd3
有参数的情况,如--cmd3=SOMETHING
中所示。由于SOMETHING
可能会有所不同,因此简单的开关/外壳不再起作用。基本上,我需要在命令本身上做一个开关/案例。我以为我可以使用正则表达式,第一个匹配组是命令,第二个是可选的等号。以下内容不起作用,但它说明了我正在尝试做的事情。
$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;
}
::::::::::::::::::::::::::::::::::: EDIT ::::::::::: ::::::::::::::::::::::::::::::::::::::::::
我明白了,但是我会给那个回答upvotes并接受的人。我无法使用,因为这意味着重组一切。这是解决方案。
switch ($ARGV[0]) {
case "--cmd1" {
$action = "cmd1";
}
case "--cmd2" {
$action = "cmd2";
}
case m/--cmd3(=.*)?/ {
$ARGV[0] =~ m/--cmd3(=.*)?/;
$action = "cmd3";
print $1;
}
答案 0 :(得分:5)
为什么不使用Getopt::Long?
答案 1 :(得分:1)
这样的事情怎么样?
my $cmd = "";
my $equals = "";
if($ARGV[0] =~ m/^\-\-cmd1$/){$cmd="cmd1"}
if($ARGV[0] =~ m/^\-\-cmd2$/){$cmd="cmd2"}
if($ARGV[0] =~ m/^\-\-cmd3=(.*)$/){$cmd="cmd3";$equals=$1}