以下代码段是否相同?

时间:2014-05-08 20:57:11

标签: perl scripting

以下两个片段在功能上是否相同?当我以第一种方式执行此操作时,我收到了一堆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";
}

2 个答案:

答案 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'中得到一些背景知识,讨论什么是存在与定义之间的差异