引数を受け取る 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;
}