Perl 单行条件布尔返回语句
最近我谈到了这个Perl代码段:Perl 单行条件布尔返回语句,perl,return,conditional,Perl,Return,Conditional,最近我谈到了这个Perl代码段: if($foo eq "foo") { return 1; } my $bar = GetBar(); return ($bar eq "bar") 如果$foo的值曾经等于foo,它将立即返回true,而不调用GetBar。假设只有当语句$foo eq“foo”为true时才会出现这种情况,那么是否有一个单线条件布尔返回语句如下所示: return only if $foo eq "foo"; 含义:仅当$foo eq“foo”为真时,才返回
if($foo eq "foo") {
return 1;
}
my $bar = GetBar();
return ($bar eq "bar")
如果$foo
的值曾经等于foo
,它将立即返回true,而不调用GetBar
。假设只有当语句$foo eq“foo”
为true时才会出现这种情况,那么是否有一个单线条件布尔返回语句如下所示:
return only if $foo eq "foo";
含义:仅当$foo eq“foo”
为真时,才返回$foo eq“foo”
的值
我很好奇在任何编码语言中是否有这样的语句。可能类似于三元运算符(在python中)
在Perl中,如果所述值为true,则不能返回比较返回的值,但是
if ($foo eq 'foo') { return 1; }
可以写成
return 1 if $foo eq 'foo';
与流控制语句一样,语句修饰符也记录在中
顺便说一下,您发布的全部代码可以简化为以下内容:
return $foo eq 'foo' || GetBar() eq 'bar';
只有当$foo eq“foo”为真时,您才会说“返回$foo eq“foo”的值。”
你可以通过简单的方法做到这一点
return 1 if $foo eq 'foo';
如果eq
未重载且1是唯一可能的真值
如果它重载并可能返回false或1以外的内容,则可以执行以下操作:
$_ and return $_ for $foo eq 'foo';
但只有当你的目标是试图产生糟糕的代码时
my $foofoo = $foo eq 'foo';
return $foofoo if $foofoo;
会好得多。你的实际问题是什么?
if(EXPR){return EXPR;}
是否可以写成return EXPR if EXPR代码>在Perl中?如果是的话,答案是肯定的。不幸的是,评论必须超过3个字符,所以我添加了这句话。不很好,这正是我想要的。谢谢你的简化示例,我不会这么想的。我会避免简化。最好在单独的语句中包含子调用,以便于调试。从这个角度来看,问题中的原始代码是完美的。@ysth,现在添加调试挂钩还为时过早。我对Perl有更多的经验,但现在我也在编写大量Python,我错过了Python的IF表达式的TrueValue-IfCondition-false-value语法。($cond?$trueValue:$falseValue)的可读性可能较低。问:有允许Python顺序的Perl习惯用法吗?^你是说三元运算符吗?在Perl中:my$value=$cond$value\u if\u true:$value\u if\u false代码>或返回$cond$value\u if\u true:$value\u if\u false代码>
my $foofoo = $foo eq 'foo';
return $foofoo if $foofoo;