你所说的 “初始化” 是什么意思?具有不是“undef”的值?
对于少量值,直截了当,如果检查是恕我直言,最易读/可维护。
if (!$var1 || !$var2 || !$var3) {
print "ERROR: Some are not defined!";
}
顺便说一句,检查!$var
是在“0”的可能的错误是在Perl假,因此初始化为“0”将失败该检查的字符串。这是一个很大更好地使用$var eq ""
或者更好的是,空间的东西出来> 3倍的值
if (!$var1 # Use this if your values are guarantee not to be "0"
|| $var2 eq "" # This is a LOT better since !$var fails on "0" value
|| $var3 eq "") {
print "ERROR: Some are not defined!";
}
如果有这么多的值,检查上面变得难以阅读(尽管每行检查在第二个例子中,它并没有真正发生过),或者如果值存储在阵列,您可以使用grep抽象掉了检查:
# We use "length" check instead of "$_ eq ''" as per tchrist's comment below
if (grep { length } ($var1, $var2, $var3, $var4, $var5, @more_args)) {
print "ERROR: Some are not defined!";
}
如果你必须知道哪些的价值观a再没有定义,你可以使用循环(留给读者一个明显的锻炼; Tibial),或地图招:
my $i = -1; # we will be pre-incrementing
if (my @undefined_indexes = map { $i++; $_ ?() : $i }
($var1, $var2, $var3, $var4, $var5, @more_args)) {
print "ERROR: Value # $_ not defined!\n" foreach @undefined_indexes;
}
来源
2010-11-10 09:24:20
DVK
如果您提供了一个当前如何操作的示例,那么您可能会得到更多/更好的答案,包括在一个或多个尚未初始化时的适当反应。 (抛出一个错误?将它们设置为默认值?等等) – 2010-11-10 09:30:10