Perl switch語句



switch 語句允許將變數與其值列表進行相等性測試。每個值稱為一個case,系統會檢查正在切換的變數的每個switch case

switch case的實現依賴於Switch模組,而Switch模組是使用Filter::Util::CallText::Balanced實現的,需要安裝這兩個模組。

語法

Perl程式語言中switch語句的概要如下:

use Switch;

switch(argument) {
   case 1            { print "number 1" }
   case "a"          { print "string a" }
   case [1..10,42]   { print "number in list" }
   case (\@array)    { print "number in list" }
   case /\w+/        { print "pattern" }
   case qr/\w+/      { print "pattern" }
   case (\%hash)     { print "entry in hash" }
   case (\&sub)      { print "arg to subroutine" }
   else              { print "previous case not true" }
}

switch語句適用以下規則:

  • switch語句接受一個任何型別的單個標量引數,用括號指定。

  • 該值後面是一個程式碼塊,該程式碼塊可以包含一個或多個case語句,後面跟著Perl語句塊。

  • case語句接受一個單個標量引數,並選擇case引數和當前switch值之間的適當匹配型別。

  • 如果匹配成功,則執行與case語句關聯的必需程式碼塊。

  • switch語句可以有一個可選的else case,它必須出現在switch的末尾。預設case可用於在沒有匹配任何case時執行任務。

  • 如果case程式碼塊執行一個非目標的next,控制會立即轉移到case語句之後的語句(即通常是另一個case),而不是switch程式碼塊之外。

  • 並非每個case都需要包含next。如果沒有出現next,控制流將不會貫穿後續的case。

流程圖

Switch statement in Perl

示例

#!/usr/local/bin/perl

use Switch;

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

switch($var) {
   case 10           { print "number 100\n" }
   case "a"          { print "string a" }
   case [1..10,42]   { print "number in list" }
   case (\@array)    { print "number in list" }
   case (\%hash)     { print "entry in hash" }
   else              { print "previous case not true" }
}

執行上述程式碼時,會產生以下結果:

number 100

貫穿通常在switch語句中是個壞主意。但是,現在考慮一個貫穿case,我們將使用next將控制轉移到下一個匹配的case,在本例中是一個列表:

#!/usr/local/bin/perl

use Switch;

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

switch($var) {
   case 10           { print "number 100\n"; next; }
   case "a"          { print "string a" }
   case [1..10,42]   { print "number in list" }
   case (\@array)    { print "number in list" }
   case (\%hash)     { print "entry in hash" }
   else              { print "previous case not true" }
}

執行上述程式碼時,會產生以下結果:

number 100
number in list
perl_conditions.htm
廣告