Issue #16432 has been updated by nobu (Nobuyoshi Nakada). It is same as the following code without irb. ```ruby proc { p eval("(1..10).map{_1+_1}") #=> [84, 84, 84, 84, 84, 84, 84, 84, 84, 84] _1 }.call(42) ``` This is because the `eval` code is executed at the current context exactly. Another choice is to raise a syntax error at the runtime. ---------------------------------------- Feature #16432: Using `_1` inside `binding.irb` will cause unintended behavior https://bugs.ruby-lang.org/issues/16432#change-83245 * Author: osyo (manga osyo) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- ## Summary Calling `binding.irb` in a block that uses `_1` and using `_1` in `irb` will cause unintended behavior. ## Steps to reproduce 1. Use `_1` in block 2. Use `binding.irb` in block 3. Use block with `_1` in `binding.irb` ```ruby # test.rb proc { binding.irb _1 }.call 42 ``` ```ruby # binding.irb irb> (1..10).map { _1 + _1 } ``` ## Expected behavior ```ruby irb> _1 => 42 irb> (1..10).map { _1 + _1 } = > [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] ``` ## Actual behavior * Refers to the `_1` of the block that called` binding.irb` ```ruby irb> _1 => 42 irb> (1..10).map { _1 + _1 } = > [84, 84, 84, 84, 84, 84, 84, 84, 84, 84] ``` I think this is an unintended behavior for the user. -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>