使用三元运算符选择perl子例程

Tom*_*ner 1 perl ternary-operator subroutine

我有一种情况,我想根据一个相当简单的测试调用两个子程序之一,但参数列表非常复杂.这似乎是使用三元运算符最容易阅读并在C中工作正常,但perl等价物正在逃避我.

代码是这样的

$res = ($d eq 'something' ? \func1 : \func2)(parameters);
Run Code Online (Sandbox Code Playgroud)

但perl对)(序列非常不满,对于我的生活,我无法弄清楚要放在那里的东西

yst*_*sth 5

\func1调用func1并引用其返回值 - 而不是你想要的.要引用sub,请使用\&func1(带&括号和不带括号).

要调用对sub的引用,您可以使用以下命令取消引用它&BLOCK:

&{ statements-yielding-a-coderef }(parameters)

# can be simplified to this if the reference is in a simple scalar:
&$coderef(parameters)
Run Code Online (Sandbox Code Playgroud)

或者->(由于->优先级高,可能需要括号):

( expression-yielding-a-coderef )->(parameters)
Run Code Online (Sandbox Code Playgroud)

所以要么:

$result = &{ $d eq 'something' ? \&func1 : \&func2 }(parameters);
Run Code Online (Sandbox Code Playgroud)

要么:

$result = ( $d eq 'something' ? \&func1 : \&func2 )->(parameters);
Run Code Online (Sandbox Code Playgroud)