基于正则表达式的Perl参数切换

use*_*896 0 regex perl pcre arguments

我有一个接受参数的Perl脚本.当我有单值参数时,以下代码就足够了:

                    switch ($ARGV[0]) {

                    case "--cmd1" {
                            $action = "cmd1";
                    }


                    case "--cmd2" {
                            $action = "cmd2";
                    }
Run Code Online (Sandbox Code Playgroud)

现在,我有一个命令,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;
                    }
Run Code Online (Sandbox Code Playgroud)

:::::::::::::::::::::::::::::::::::编辑:::::::::::::: :::::::::::::::::::::::::::::::::::::::

我想通了,但我会给那个回答upvotes并接受的人.我无法使用,因为这意味着重组一切.这是解决方案.

                   switch ($ARGV[0]) {

                    case "--cmd1" {
                            $action = "cmd1";
                    }

                    case "--cmd2" {
                            $action = "cmd2";
                    }

                    case m/--cmd3(=.*)?/ {
                            $ARGV[0] =~ m/--cmd3(=.*)?/;
                            $action = "cmd3";
                            print $1;
                    }
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 5

你为什么不使用Getopt :: Long