Perl switch 語(yǔ)句

Perl 條件語(yǔ)句 Perl 條件語(yǔ)句

一個(gè) switch 語(yǔ)句允許測(cè)試一個(gè)變量等于多個(gè)值時(shí)的情況。每個(gè)值稱為一個(gè) case,且被測(cè)試的變量會(huì)對(duì)每個(gè) switch case 進(jìn)行檢查。

switch case 執(zhí)行是基于 Switch 模塊, Switch 模塊使用Filter::Util::CallText::Balanced 來(lái)執(zhí)行,這兩個(gè)模塊都需要安裝。

語(yǔ)法

語(yǔ)法格式如下所示:

use Switch;

switch(argument){
   case 1            { print "數(shù)字 1" }
   case "a"          { print "字符串 a" }
   case [1..10,42]   { print "數(shù)字在列表中" }
   case (\@array)    { print "數(shù)字在數(shù)組中" }
   case /\w+/        { print "正則匹配模式" }
   case qr/\w+/      { print "正則匹配模式" }
   case (\%hash)     { print "哈希" }
   case (\&sub)      { print "子進(jìn)程" }
   else              { print "不匹配之前的條件" }
}

以下是 switch 語(yǔ)句的規(guī)則:

  • switch 語(yǔ)句的括號(hào)中可以使用任意類型的標(biāo)量參數(shù)。
  • 在一個(gè) switch 中可以有任意數(shù)量的 case 語(yǔ)句。每個(gè) case 后跟一個(gè)要比較的值和一個(gè)冒號(hào)。

  • case 語(yǔ)句后的標(biāo)量會(huì)與 switch 語(yǔ)句的標(biāo)量進(jìn)行比較,判斷是否相等。

  • 當(dāng)被測(cè)試的變量等于 case 中的常量時(shí),case 后跟的語(yǔ)句將被執(zhí)行,直到遇到 break 語(yǔ)句為止。

  • switch 語(yǔ)句可以有一個(gè)可選的 else ,該語(yǔ)句在最后面,該語(yǔ)句在所有 case 不匹配的情況下執(zhí)行。

  • 當(dāng)匹配 case 后,會(huì)執(zhí)行 case 語(yǔ)句塊代碼,執(zhí)行后跳出 switch 語(yǔ)句。

  • 當(dāng)匹配 case 后,如果我們需要繼續(xù)執(zhí)行接下來(lái)的 case 語(yǔ)句,則需要添加 next 語(yǔ)句。

流程圖

實(shí)例

#!/usr/bin/perl

use Switch;

$var = 10;
@array = (10, 20, 30);
%hash = ('key1' => 10, 'key2' => 20);

switch($var){
   case 10           { print "數(shù)字 10\n" }
   case "a"          { print "字符串 a" }
   case [1..10,42]   { print "數(shù)字在列表中" }
   case (\@array)    { print "數(shù)字在數(shù)組中" }
   case (\%hash)     { print "在哈希中" }
   else              { print "沒(méi)有匹配的條件" }
}

執(zhí)行以上程序,輸出結(jié)果為:

數(shù)字 10

接下來(lái)我們看下使用 next 的實(shí)例:

#!/usr/bin/perl

use Switch;

$var = 10;
@array = (10, 20, 30);
%hash = ('key1' => 10, 'key2' => 20);

switch($var){
   case 10           { print "數(shù)字 10\n"; next; }  # 匹配后繼續(xù)執(zhí)行
   case "a"          { print "string a" }
   case [1..10,42]   { print "數(shù)字在列表中" }
   case (\@array)    { print "數(shù)字在數(shù)組中" }
   case (\%hash)     { print "在哈希中" }
   else              { print "沒(méi)有匹配的條件" }
}

執(zhí)行以上程序,輸出結(jié)果為:

數(shù)字 10
數(shù)字在列表中

Perl 條件語(yǔ)句 Perl 條件語(yǔ)句