The __END__ keyword in Ruby causes the parser to stop executing the source file; it is often used for appending documentation such as a LICENSE file to the end of a source code file.
More interesting is the fact that the contents of the file following the __END__ keyword are available via the global IO object named DATA.
This means that it is possible to include test data -- even binary data -- at the end of a Ruby source file:
bash$ cat od.rb
#!/usr/bin/env ruby
if __FILE__ == $0
offset = 0
while (buf = DATA.read(16)) do
bytes = buf.unpack 'C*'
puts "%08X: %s\n" % [ offset, bytes.map { |b| " %03o" % b } ]
offset += 16
end
end
__END__
bash$ cat /bin/true >> od.rb
bash$ ./od.rb
00000000: 177 105 114 106 002 001 001 000 000 000 000 000 000 000 000 000
00000010: 002 000 076 000 001 000 000 000 220 044 100 000 000 000 000 000
00000020: 100 000 000 000 000 000 000 000 060 226 001 000 000 000 000 000
...
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment