Here's 6 little solutions (pastied http://pastie.caboo.se/160330 too). The
last two just print the file name, so they'll have to be in a "Hello, world!"
file (or as close as your OS supports).
## attempt 1
def print_caller
print caller.first.match(/`(.*)'$/)[1]
end
def H; print_caller; end
def e; print_caller; end
def l; print_caller; end
def o; print_caller; end
def comma; print ','; end
def space; print ' '; end
def w; print_caller; end
def r; print_caller; end
def d!; print_caller; end
def newline; print "\n"; end
H(); e; l; l; o; comma; space; w; o; r; l; d!; newline
## attempt 2
class Hello
def self.printer s; define_method(s) { print s; self }; end
%w{H e l o w r d!}.each { |s| printer(s) }
end
Hello.new.H.e.l.l.o.w.o.r.l.d!
## attempt 3
class Hello
def method_missing m; print m; self; end
end
Hello.new.H.e.l.l.o.send(', ').w.o.r.l.d!.send("\n")
## attempt 4, quine-ish
#!/usr/bin/env ruby
require 'enumerator'
lines = File.readlines(__FILE__)
[20, 0,
0, 11,
4, 0,
4, 0,
2, 17,
5, 3,
0, 14,
18, 28,
2, 17,
0, 5,
4, 0,
4, 16,
0, 1,
1, 0].each_slice(2) { |row, col| print lines[row][col..col] }
Hash
## attempt 5
# Must be in a file called "Hello, world!"
begin
raise :foo
rescue StandardError => se
puts se.backtrace.first.match(/([^\/\\:]+):/)[1]
end
## attempt 6
# Must be in a file called "Hello, world!"
puts __FILE__