BEGIN and END

BEGIN and ENDare reserved words in Ruby that declare code to be executed at the very beginning and very end of a Ruby program. (Note that BEGIN and END in capital letters are completely different from begin and end in lowercase.) If there is more than one BEGIN statement in a program, they are executed in the order in which the interpreter encounters them. If there is more than one END statement, they are executed in the reverse of the order in which they are encountered—that is, the first one is executed last. These statements are not commonly used in Ruby. They are inherited from Perl, which in turn inherited them from the awk text-processing language.

BEGIN and END must be followed by an open curly brace, any amount of Ruby code, and a close curly brace. The curly braces are required; do and end are not allowed here. For example:

BEGIN {
  # Global initialization code goes here
}

END {
  # Global shutdown code goes here
}

The BEGIN and END statements are different from each other in subtle ways. BEGIN statements are executed before anything else, including any surrounding code. This means that they define a local variable scope that is completely separate from the surrounding code. It only really makes sense to put BEGIN statements in top-level code; a BEGIN within a conditional or loop will be executed without regard for the conditions that surround it. Consider this code:

if (false) BEGIN { puts "if"; # This will be printed a = 4; # This variable only defined here } ...

Get The Ruby Programming Language now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.