斎藤と申します。おもしろい問題ですね。

個人的にはなんとなく既視感があるのですが、過去のメール・チケットの
中からは、自分はうまく見つけられませんでした。

Konishiさんが先に投稿されたことで大方カバーされていると思いますが、
自分が調べた点を一つ。

ちなみに、ruby 2.4.1p111での動作です。
>

手元で試した限り、同名の変数の有無によって振る舞いが変わるのは、
1.8.7〜2.4の全ての系列で同じでした。もっと古いRubyについては、
まだ試していません。

ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux]
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-linux]
ruby 2.0.0p648 (2015-12-16 revision 53162) [x86_64-linux]
ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux]
ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-linux]
ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-linux]
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

(ちなみに、pが引数をそのまま返り値として返すようになるのは1.9から
で、1.8.7までは nil が返ります。そのため、1.8.7の実行では (p(-1.3)).abs
に 対しては nil.abs が実行され、その結果エラーになりました。)

以上のように、伝統的な振る舞いである(うっかり変えると悲劇が起きそうな)
のは分かったのですが、これがバグなのか・そうでないのか、JIS/ISO規格の
どこに書いてあるのか・未定義なのか・はたまた規格違反な振る舞いのか、
あたりは、自分には判断が付きませんでした。

もし詳しい方が答えてくだされば、自分としてはうれしいです。
-- 
斎藤 匡