ion*_*ish 0 php perl if-statement function
我正在尝试从php转换到perl,并且预计会遇到一些奇怪的现象.我无法理解为什么我的代码的一个版本与另一个版本有效.
这失败了:
sub tester
{
$return;
($_[0] < 10) ? $return = "youre a youngin" : $return = "youre an old person";
return $return;
}
print "how old are you?";
$a = <>;
chomp $a;
print tester($a); #both result in "youre an old person"
Run Code Online (Sandbox Code Playgroud)
但是这个有效:
sub tester
{
return ($_[0] < 10) ? "youre a youngin" : "youre an old person";
}
print "how old are you?";
$a = <>;
chomp $a;
print tester($a);
Run Code Online (Sandbox Code Playgroud)
这里有什么真正的区别?!
Min*_*ang 11
它与Perl的运算符优先级有关.在Perl,
($_[0] < 10) ? $return = "youre a youngin" : $return = "youre an old fart";
Run Code Online (Sandbox Code Playgroud)
和...一样
( ($_[0] < 10) ? $return = "youre a youngin" : $return ) = "youre an old fart";
Run Code Online (Sandbox Code Playgroud)
请注意帕伦与FRONT绑定.
这导致了Perl的另一个令人困惑的特性:条件左值:你可以这样做
(CONDITION ? $ASSIGN_A_IF_CONDITION_IS_TRUE : $ASSIGN_B_IF_CONDITION_IS_FALSE) = 2
这是一个修复
($_[0] < 10) ? ($return = "youre a youngin") : ($return = "youre an old fart");
Run Code Online (Sandbox Code Playgroud)
编辑:
但是,大多数人都会写
$return = ($_[0] < 10) ? "youre a youngin" : "youre an old fart";
Run Code Online (Sandbox Code Playgroud)
,节省了两次输入变量的冗余.
根据Perl和PHP文档,Perl ?:是右关联的,PHP ?:是左关联的.(http://perldoc.perl.org/perlop.html)(http://php.net/manual/en/language.operators.precedence.php)
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |