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”为真时,才返回

最近我谈到了这个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”
为真时,才返回
$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;