Perl`defined`函数复杂性

Perl`defined`函数复杂性,perl,Perl,我有一个perl脚本,它接受一系列参数(强制和非强制)。根据这些参数确定脚本的流程。我感到困惑的是,如果在脚本中多次使用arg(以开关的形式)来确定流(大部分时间在if循环中使用),那么哪个更好 if(定义的arg){} 或 my$switch=defined arg?1:0; if($switch){}已定义已返回true或false。使用定义的的结果为true case选择true值,为false case选择false值只是额外的工作。这将完成您需要的所有工作,无需额外工作: if( de

我有一个perl脚本,它接受一系列参数(强制和非强制)。根据这些参数确定脚本的流程。我感到困惑的是,如果在脚本中多次使用arg(以开关的形式)来确定流(大部分时间在
if
循环中使用),那么哪个更好
if(定义的arg){}

my$switch=defined arg?1:0; if($switch){}

已定义
已返回true或false。使用定义的
的结果
为true case选择true值,为false case选择false值只是额外的工作。这将完成您需要的所有工作,无需额外工作:

if( defined $foo ) { ... }
有时我想打印该真值或假值,因此我将使用双爆炸(否定,然后再次否定)来规范化该值:

 !! defined $foo

这不是您应该优化的。使用最具可读性的内容。@ikegami感谢您的评论。。我知道这太小了,无法从优化的角度考虑。出于好奇,我想到了这一点。第二种选择增加了复杂性
defined foo
已经返回
1
(这是真的)或
q{}
(空字符串,为假)。您需要做的就是确保允许设置您的
arg
,并且
0
,因为在这种情况下它仍然是
定义的。