インクリメント演算子の+と-は実装が大きく異なっているのでしょうか?
まったく実践的じゃない質問です。
単なる好奇心からインクリメント演算子を何気なくいじって、結果がどうなるか試していました。
すると正負をひっくり返した場合にエラーが出る場合と出ない場合がありました。
+--+
を前置した場合:
$ perl -E '$z = 3; say +--+$z;'
2
-++-
を前置した場合:
$ perl -E '$z = 3; say -++-$z;'
Can't modify negation (-) in preincrement (++) at -e line 1, near "$z;"
Execution of -e aborted due to compilation errors.
どうしてこのような差が出るんでしょうか?
perlのバージョンは5.18.2、OSXの上で実行しています。
以下はMO=Deparseした時の出力です:
$ perl -MO=Deparse -E '$z = 3; say +--+$z;'
use feature 'current_sub', 'evalbytes', 'fc', 'say', 'state', 'switch', 'unicode_strings', 'unicode_eval';
$z = 3;
say --$z;
-e syntax OK
$ perl -MO=Deparse -E '$z = 3; say -++-$z;'
Can't modify negation (-) in preincrement (++) at -e line 1, near "$z;"
-e had compilation errors.
use feature 'current_sub', 'evalbytes', 'fc', 'say', 'state', 'switch', 'unicode_strings', 'unicode_eval';
$z = 3;
say -++(-$z);