0

引数を受け取る Perl スクリプトがあります。単一の値の引数がある場合は、次のコードで十分です。

                    switch ($ARGV[0]) {

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


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

ここで、コマンドに のcmd3ようにパラメーターがある場合があります--cmd3=SOMETHING。変化する可能性があるためSOMETHING、単純なスイッチ/ケースは機能しなくなりました。基本的に、コマンド自体でスイッチ/ケースを実行する必要があります。最初に一致するグループがコマンドで、2番目がオプションのequalsである正規表現を使用できると思いました。以下は機能しませんが、私がやろうとしていることを示しています。

                    $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 に答える