以下两个片段在功能上是否相同?当我以第一种方式执行此操作时,我收到了一堆use of uninitialized value
警告,因为我尝试评估不存在的$seen{$key}
。希望避免这种情况。 $seen{$key}
始终为1或未定义,它永远不会在整个脚本中采用任何其他值。
if($seen{$key}=='1'){
print "key already seen\n";
}else{
print "key not seen\n";
#do stuff with key
$seen{$key}='1';
}
~~~~
if(!$seen{$key}){
print "key not seen\n";
#do stuff with key
$seen{$key}='1';
}else{
print "key already seen\n";
}
答案 0 :(得分:2)
您应该阅读"Truth and Falsehood"的文档。
基本上“0”,空字符串“”或undef为false。如果您尝试在数字上下文中使用undef值,您将收到错误“在数字中使用未初始化的值$变量...”
答案 1 :(得分:0)
考虑一下:
#at start of script ----------
use warnings;
use strict;
# ----------------------------
if(exists $seen{$key}){
print "key already seen\n";
}else{
print "key not seen\n";
#do stuff with key
$seen{$key}='1';
}
除了“什么是真理”(一个真正分层的问题,不适合SO)的问题,你似乎不知道“存在”的功能..
你可以在this Stack Ooverflow'Question / Answer'中得到一些背景知识,讨论什么是存在与定义之间的差异