以下是检查标量变量是否在Perl中初始化的最佳方法,使用defined
?
my $var;
if (cond) {
$var = "string1";
}
# Is this the correct way?
if (defined $var) {
...
}
Run Code Online (Sandbox Code Playgroud)
raf*_*afl 34
Perl没有提供检查变量是否已初始化的方法.
但是,未使用某些值显式初始化的标量变量undef
默认情况下具有值.你是正确defined
的方法来检查一个变量的值是否正确undef
.
还有其他几种方式.如果你想赋给变量,如果是undef
,你的示例代码似乎表明,你可以,例如,使用Perl的定义,或操作:
$var //= 'a default value';
Run Code Online (Sandbox Code Playgroud)
vol*_*ron 11
这取决于你想要做什么.正确的C
做法是在声明变量时初始化变量; 但是,Perl is not C
所以下列之一可能是你想要的:
1) $var = "foo" unless defined $var; # set default after the fact
2) $var = defined $var? $var : {...}; # ternary operation
3) {...} if !(defined $var); # another way to write 1)
4) $var = $var || "foo"; # set to $var unless it's falsy, in which case set to 'foo'
5) $var ||= "foo"; # retain value of $var unless it's falsy, in which case set to 'foo' (same as previous line)
6) $var = $var // "foo"; # set to $var unless it's undefined, in which case set to 'foo'
7) $var //= "foo"; # 5.10+ ; retain value of $var unless it's undefined, in which case set to 'foo' (same as previous line)
Run Code Online (Sandbox Code Playgroud)
做事方式(不推荐):
# initialize the variable to a default value during declaration
# then test against that value when you want to see if it's been changed
my $var = "foo";
{...}
if ($var eq "foo"){
... # do something
} else {
... # do something else
}
Run Code Online (Sandbox Code Playgroud)
另一种冗长的方法是在变量被更改时创建一个类和一个标志,这是不必要的.