我有一個接受參數的Perl腳本。當我有單值參數,下面的代碼就夠了:基於正則表達式的Perl參數切換
switch ($ARGV[0]) {
case "--cmd1" {
$action = "cmd1";
}
case "--cmd2" {
$action = "cmd2";
}
現在,我已經在那裏指揮,cmd3
有一個參數,如--cmd3=SOMETHING
的情況下。由於SOMETHING
可以變化,簡單的開關/外殼不再工作。基本上,我需要在命令本身上做一個開關/外殼。我想我可以使用正則表達式,第一個匹配組是命令,第二個是可選的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;
}
:::::::::::::::::::::::::::::::::::編輯::::::: ::::::::::::::::::::::::::::::::::::::::::::::::
我明白了,但我會給那些回答讚揚並接受的人。我不能使用,因爲這意味着重組所有的東西。這是解決方案。
switch ($ARGV[0]) {
case "--cmd1" {
$action = "cmd1";
}
case "--cmd2" {
$action = "cmd2";
}
case m/--cmd3(=.*)?/ {
$ARGV[0] =~ m/--cmd3(=.*)?/;
$action = "cmd3";
print $1;
}
爲什麼不使用'Getopt :: *'? –
將可能的命令放在分派表中,使用散列鍵作爲文字命令名稱,並將代碼引用作爲散列值。然後,在你的模式匹配後,你可以說:''dispatch {$ 1} - >($ 2)'「 – DavidO
Perl的開關是一個(不推薦使用的)源代碼過濾器。給定/何時,或者何時可能會更好,但我主要是贊成使用基於散列的調度來實現類似的功能。 – DavidO