Skip to content

Perl IF...ELSE (条件判断)

Perl 中的条件语句允许你的程序做出决策。它们根据指定条件是真 (true) 还是假 (false) 来执行不同的代码块 (block)。

在 Perl 的布尔上下文 (boolean context) 中:

  • 数字 0
  • 字符串 '0' 和 "" (空字符串)
  • 空列表 ()
  • 特殊值 undef

都被视为 假 (false)。所有其他值都被视为 真 (true)。

Perl 提供了以下主要的条件语句类型:

语句描述
if 语句如果条件为真,则执行代码块。
if...else 语句如果条件为真,则执行一个代码块;如果条件为假,则执行另一个代码块。
if...elsif...else 语句按顺序测试多个条件。执行第一个为真的条件对应的代码块,如果所有条件都为假,则执行 else 代码块。
unless 语句如果条件为假,则执行代码块(与 if 相反)。
unless...else 语句如果条件为假,则执行一个代码块;如果条件为真,则执行另一个代码块。
unless...elsif...else 语句类似于 if...elsif...else,但初始条件被否定。elsif 条件正常评估。(注意:unless...elsif 有时可能令人困惑;通常重构为 if 更清晰)。

基本的 if 语句结构:

if (condition) {
# 如果条件为真,则执行此代码
}

基本的 if...else 语句结构:

if (condition) {
# 如果条件为真,则执行此代码
} else {
# 如果条件为假,则执行此代码
}

基本的 if...elsif...else 语句结构:

if (condition1) {
# condition1 为真时执行的代码
} elsif (condition2) {
# condition1 为假且 condition2 为真时执行的代码
} else {
# 所有先前条件都为假时执行的代码
}

基本的 unless 语句结构:

unless (condition) {
# 如果条件为假,则执行此代码
}

Perl 还提供了一种简洁的条件运算符,即三元运算符 ? :。这是一个根据条件求值为两个值之一的表达式。其一般形式为:

condition ? expression_if_true : expression_if_false;

如果 condition 为真,整个表达式求值为 expression_if_true。如果 condition 为假,则求值为 expression_if_false。

使用三元运算符的示例:

#!/usr/bin/perl
use strict;
use warnings;
my $name = "Ali";
my $age = 10;
my $status = ($age > 60) ? "a senior citizen" : "not a senior citizen";
print "$name is $status.\n";
$age = 70;
$status = ($age > 60) ? "a senior citizen" : "not a senior citizen";
print "$name is now $status.\n";

这将产生以下结果:

Ali is not a senior citizen.
Ali is now a senior citizen.

短路求值 (Short-circuit evaluation):Perl 的逻辑运算符 && (AND) 和 || (OR) 使用短路求值,也可用于条件执行,尽管对于复杂逻辑来说,专门的 if 语句通常更易读。

# 条件执行的短路示例
# (条件 && 如果为真则执行的操作)
# (条件 || 如果为假则执行的操作)
my $debug_mode = 1;
$debug_mode && print "Debugging is ON.\n";
my $user_input = "";
$user_input || print "User input is empty!\n";