Perl |给定时间语句
Perl 中的**given-when**语句是将一个变量与几个整数值进行比较的长 if 语句的替代语句。
- **given-when**语句是多路分支语句。它提供了一种简单的方法,可以根据表达式的值将执行分派到代码的不同部分。
- **given**是允许值改变执行控制的控制语句。
Perl 中的 given-when 类似于的**switch-case**C/c++、 Python 或者 PHP 。就像**switch**语句一样,它也用不同的情况替换多个 if 语句。
语法:
given(expression)
{
    when(value1) {Statement;}
    when(value2) {Statement;}
    default {# Code if no other case matches}
}
given-when 语句还使用了另外两个关键词,即 break 和 continue 。这些关键字维持程序的流程,并帮助退出程序执行或以特定值跳过执行。
破防:破防关键字用来破防出一个 when 区块。在 Perl 中,不需要在每个 when 块后显式写 break。它已经被隐式定义了。
继续:继续,另一方面,移动到下一个 when 块如果第一个 when 块是正确的。

在 given-when 语句中,一个条件语句不能在多个 when 语句中重复,这是因为 Perl 只检查该条件的第一次出现,下一个重复的语句将被忽略。此外,默认语句必须放在所有 when 语句之后,因为编译器会按顺序检查每个 when 语句的条件匹配,如果我们将default放在两者之间,那么它会在那里取一个break并打印默认语句。
示例:
#!/usr/bin/perl
# Perl program to print respective day
# for the day-code using given-when statement
use 5.010;
# Asking the user to provide day-code
print "Enter a day-code between 0-6\n";  
# Removing newline using chomp
chomp(my $day_code = <>);  
# Using given-when statement
given ($day_code) 
{  
    when ('0') { print 'Sunday' ;}  
    when ('1') { print 'Monday' ;}  
    when ('2') { print 'Tuesday' ;}  
    when ('3') { print 'Wednesday' ;} 
    when ('4') { print 'Thursday' ;}  
    when ('5') { print 'Friday' ;} 
    when ('6') { print 'Saturday' ;}
    default { print 'Invalid day-code';}  
}  
输入:
4
输出:
Enter a day-code between 0-6
Thursday
嵌套given-when语句
嵌套的 given-when 语句是指 given-when 语句里面的另一个 given-when 语句。这可用于维护用户为特定输出集提供的输入层次结构。
语法:
given(expression)
{
    when(value1) {Statement;}
    when(value2) {given(expression)
                  {
                     when(value3) {Statement;}   
                     when(value4) {Statement;}   
                     when(value5) {Statement;} 
                     default{# Code if no other case matches}
                  }
                 }
    when(value6) {Statement;}
    default {# Code if no other case matches}
}
以下是嵌套 given-when 语句的示例:
#!/usr/bin/perl
# Perl program to print respective day
# for the day-code using given-when statement
use 5.010;
# Asking the user to provide day-code
print "Enter a day-code between 0-6\n";  
# Removing newline using chomp
chomp(my $day_code = <>);  
# Using given-when statement
given ($day_code) 
{  
    when ('0') { print 'Sunday' ;}  
    when ('1') { print "What time of day is it?\n";
                 chomp(my $day_time = <>);
                 # Nested given-when statement
                 given($day_time)
                 {
                     when('Morning') {print 'It is Monday Morning'};
                     when('Noon')    {print 'It is Monday noon'};
                     when('Evening') {print 'It is Monday Evening'};
                     default{print'Invalid Input'};
                 }
                }  
    when ('2') { print 'Tuesday' ;}  
    when ('3') { print 'Wednesday' ;} 
    when ('4') { print 'Thursday' ;}  
    when ('5') { print 'Friday' ;} 
    when ('6') { print 'Saturday' ;}
    default { print 'Invalid day-code';}  
}  
输入:
1
Morning
输出:
Enter a day-code between 0-6
What time of day is it?
It is Monday Morning
输入:
3
输出:
Enter a day-code between 0-6
Wednesday
在上面给出的例子中,当输入日期代码不是 1 时,代码将不会进入嵌套的**given-when**块,并且输出将与前面的例子相同,但是如果我们给出 1 作为输入,那么它将执行嵌套的**given-when**块,并且输出将与前面的例子不同。

