Perl switch 語句
一個switch語句允許測試一個變量等於多個值時的情況。 每個值稱為一個case,且被測試的變量會對每個switch case進行檢查。
switch case執行是基於Switch模塊,Switch模塊使用Filter::Util::Call和Text::Balanced來執行,這兩個模塊都需要安裝。
語法
語法格式如下所示:
use Switch; switch(argument){ case 1 { print "数字 1" } case "a" { print "字符串 a" } case [1..10,42] { print "数字在列表中" } case (\@array) { print "数字在数组中" } case /\w+/ { print "正则匹配模式" } case qr/\w+/ { print "正则匹配模式" } case (\%hash) { print "哈希" } case (\&sub) { print "子进程" } else { print "不匹配之前的条件" } }
以下是switch 語句的規則:
- switch語句的括號中可以使用任意類型的標量參數。
在一個switch 中可以有任意數量的case 語句。 每個case 後跟一個要比較的值和一個冒號。
case 語句後的標量會與switch 語句的標量進行比較,判斷是否相等。
當被測試的變量等於case中的常量時,case後跟的語句將被執行,直到遇到break語句為止。
switch語句可以有一個可選的else,該語句在最後面,該語句在所有case不匹配的情況下執行。
當匹配case 後,會執行case 語句塊代碼,執行後跳出switch 語句。
當匹配case後,如果我們需要繼續執行接下來的case語句,則需要添加next語句。
流程圖
實例
#!/usr/bin/perl use Switch; $var = 10; @array = (10, 20, 30); %hash = ('key1' => 10, 'key2' => 20); switch($var){ case 10 { print "数字 10\n" } case "a" { print "字符串 a" } case [1..10,42] { print "数字在列表中" } case (\@array) { print "数字在数组中" } case (\%hash) { print "在哈希中" } else { print "没有匹配的条件" } }
執行以上程序,輸出結果為:
数字 10
接下來我們看下使用next的實例:
#!/usr/bin/perl use Switch; $var = 10; @array = (10, 20, 30); %hash = ('key1' => 10, 'key2' => 20); switch($var){ case 10 { print "数字 10\n"; next; } # 匹配后继续执行 case "a" { print "string a" } case [1..10,42] { print "数字在列表中" } case (\@array) { print "数字在数组中" } case (\%hash) { print "在哈希中" } else { print "没有匹配的条件" } }
執行以上程序,輸出結果為:
数字 10 数字在列表中