Crash IRB (interactive Ruby)

16 characters

String=0
String=0

Not the shortest, but I think it's funny that it doesn't crash until the second line. Generates roughly 20 lines of text before IRB exits. For some reason it cannot be shortened to for instance 2.times{String=0}.


edit

Of all the answers so far, this is the only one that has worked for me (and it works in all versions I could get my hands on), and I've tested all of them in these versions:

On whatever kind of Linux I get when ssh'ing into my university:
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
ruby 1.8.5 (2006-08-25) [x86_64-linux]
Mac OS X Mavericks default:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Installed through Homebrew on OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

edit 2

7 characters

Combining my first version (and/or @Howard's answer, for maximum cross reference) with @chinese perl goth's answer:

STDIN=0

12 chars

ruby is not exactly my cup of tea, but I've just found out that irb acts funny when I close the stdin :)

$stdin.close

tested on irb 0.9.6(09/06/30) and ruby 1.9.3p194


10 9 chars

A shorter variant on @daniero's answer:

String=1
-

This works at least in the default OS X Mavericks Ruby (2.0.0).

The answer basically relies on the fact that the Ruby Token function does a case on the input token. One of the cases checks against String, which has been redefined by the first line. This case fails, so the case falls through to the default, which assumes the object has an ancestors accessor (which it does not).

Because the "bug" is in the tokenizer, the first line won't fail because the line only takes effect after the parsing is finished. Thus, it only affects subsequent lines. Subsequent lines must contain some kind of operator in order to see the failure.

Tags:

Ruby

Code Golf