0

我有一个接受参数的 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;
                    }
4

2 回答 2

5

你为什么不使用Getopt::Long

于 2012-12-11T18:35:07.057 回答
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}
于 2012-12-11T18:10:25.427 回答