Tom*_*ner 1 perl ternary-operator subroutine
我有一种情况,我想根据一个相当简单的测试调用两个子程序之一,但参数列表非常复杂.这似乎是使用三元运算符最容易阅读并在C中工作正常,但perl等价物正在逃避我.
代码是这样的
$res = ($d eq 'something' ? \func1 : \func2)(parameters);
Run Code Online (Sandbox Code Playgroud)
但perl对)(序列非常不满,对于我的生活,我无法弄清楚要放在那里的东西
\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)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |