4.1.13 真假值

在 Perl 中,什麼是真?什麼是假?有一套特殊的定義。初入門者,應特別留意。

Perl 用以下方式來決定真假值:

  1. 0 為假,其它數值皆為真。

  2. '0'、"0" 及空字串 ''、"" 為假,其它字串皆為真。

  3. 運算結果可以轉換成 "0" 者為假。

  4. undef 這個特別值為假。

  5. 任何未定義的值為假。

  6. 上述假值定義之外,其餘為真。

我們來看一些例子:

假值:

0
'0'
"0"
''
""
undef
10-10
0.0
'0.00' + 0   (請思考之)



真值:

1
11
22
-5
'0.00'

用例:

#! /usr/bin/perl

print "Sir, 請輸入: ";
$ans=<>;
chomp $ans;

if (!$ans) {
	print "您沒有輸入任何東西!\n";
} else {
	print "您輸入的是:$ans\n";
}

註 1:<> 是輸入符號,可由 標準輸入 取值。

註 2:chomp 是內建函式,可截去變數尾端的 \n 換行字元。

上述檢查只做一次就結束了,沒有太大意義,最好使用迴圈:

#! /usr/bin/perl

while (!$ans) {
	print "Sir, 請輸入: ";
	$ans=<>;
	chomp $ans;
	if (!$ans) { print "您沒有輸入任何東西!\n\n"; }
}

print "您輸入的是:$ans\n\n";

上面這個例子有個缺點:當使用者輸入 0 時,由於 0 為假值,會被 !$ans 誤判為沒有輸入任何東西,解決的方法之一是採用:檢查$ans 的長度來判斷有無輸入資料?如下所示:

#! /usr/bin/perl

while (length($ans)==0) {
	print "Sir, 請輸入: ";
	$ans=<>;
	chomp $ans;
	if (length($ans)==0) { print "您沒有輸入任何東西!\n\n"; }
}

print "您輸入的是:$ans\n\n";