私は Perl でいくつかの作業を行っていますが、条件演算子を使用して奇妙な結果に出くわしました。
問題のコード:
($foo eq "blah") ? @x = @somearray : @y = ("another","array");
このコードをコンパイルしようとすると、エラー " Assignment to both a list and a scalar at XXX line YY, near ');'
" が発生します。エラーの原因を突き止めようとして、Perl で配列を表現するいくつかの異なる方法を使用してこれを書きましたが、それらはすべて同じエラーで返されます。最初は、割り当てステートメントの明らかな間違いだと思っていましたが、好奇心を満たすために、ステートメントをより冗長な方法で書き直しました。
if($foo eq "blah") {
@x = @somearray;
} else {
@y = ("another","array");
}
そのバージョンのコードは完全に問題なくコンパイルされました。
条件演算子の動作と基本的な if-else ステートメントの動作との間に、ここで欠けている細かい違いはありますか? 私は常に、条件演算子は 2 番目のステートメントの省略形に過ぎないと理解していました。2 つの間に機能上の違いがない場合、なぜ Perl は最初のステートメントに反対し、2 番目のステートメントには反対しないのでしょうか?