123456789_123456789_123456789_123456789_123456789_

Pre-Defined Global Variables

Some of the pre-defined global variables have synonyms that are available via module English. For each of those, the English synonym is given.

To use the module:

require 'English'

In Brief

Exceptions

Variable English Contains Initially Read-Only Reset By
$! $ERROR_INFO Exception object or nil nil Yes Kernel.raise
$@ $ERROR_POSITION Array of backtrace positions or nil nil Yes Kernel.raise

Matched Data

Variable English Contains Initially Read-Only Reset By
$~ $LAST_MATCH_INFO MatchData object or nil nil No Matcher methods
$& $MATCH Matched substring or nil nil No Matcher methods
$` $PRE_MATCH Substring left of match or nil nil No Matcher methods
$' $POST_MATCH Substring right of match or nil nil No Matcher methods
$+ $LAST_PAREN_MATCH Last group matched or nil nil No Matcher methods
$1 First group matched or nil nil Yes Matcher methods
$2 Second group matched or nil nil Yes Matcher methods
$n nth group matched or nil nil Yes Matcher methods

Separators

Variable English Contains Initially Read-Only Reset By
$/, $-0 $INPUT_RECORD_SEPARATOR Input record separator Newline No
$</code> $OUTPUT_RECORD_SEPARATOR Output record separator {nil} No

Streams

Variable English Contains Initially Read-Only Reset By
$stdin Standard input stream {STDIN} No
$stdout Standard output stream {STDOUT} No
$stderr Standard error stream {STDERR} No
$< $DEFAULT_INPUT Default standard input {ARGF} Yes
$> $DEFAULT_OUTPUT Default standard output {STDOUT} No
$. $INPUT_LINE_NUMBER, $NR Input position of most recently read stream 0 No Certain read methods
$_ $LAST_READ_LINE String from most recently read stream {nil} No Certain read methods

Processes

Variable English Contains Initially Read-Only Reset By
$0, $PROGRAM_NAME Program name Program name No
$* $ARGV ARGV array {ARGV} Yes
$$ $PROCESS_ID, $PID Process id Process PID Yes
$? $CHILD_STATUS Status of recently exited child {nil} Yes
$LOAD_PATH, $:, $-I Array of search paths Ruby defaults Yes
$LOADED_FEATURES, $" Array of load paths Ruby defaults Yes

Debugging

Variable English Contains Initially Read-Only Reset By
$FILENAME Value returned by method {ARGF.filename} Command-line argument or '-' Yes
$DEBUG Whether option -d or --debug was given Command-line option No
$VERBOSE Whether option -V or -W was given Command-line option No

Other Variables

Variable English Contains Initially Read-Only Reset By
$-F, $; Separator given with command-line option -F
$-a Whether option -a was given Yes
$-i Extension given with command-line option -i No
$-l Whether option -l was given Yes
$-p Whether option -p was given Yes
$F Array of $_ split by $-F

Exceptions

$! (Exception)

Contains the Exception object set by {Kernel.raise}:

begin
  raise RuntimeError.new('Boo!')
rescue RuntimeError
  p $!
end

Output:

{#<}RuntimeError: Boo!>

English - $ERROR_INFO

$@ (Backtrace)

Same as $!.backtrace; returns an array of backtrace positions:

begin
  raise RuntimeError.new('Boo!')
rescue RuntimeError
  pp $@.take(4)
end

Output:

["(irb):338:in `<top (required)>'",
 "/snap/ruby/317/lib/ruby/3.2.0/irb/workspace.rb:119:in `eval'",
 "/snap/ruby/317/lib/ruby/3.2.0/irb/workspace.rb:119:in `evaluate'",
 "/snap/ruby/317/lib/ruby/3.2.0/irb/context.rb:502:in `evaluate'"]

English - $ERROR_POSITION.

Matched Data

These global variables store information about the most recent successful match in the current scope.

For details and examples, see Regexp Global Variables.

$~ (MatchData)

MatchData object created from the match; thread-local and frame-local.

English - $LAST_MATCH_INFO.

$& (Matched Substring)

The matched string.

English - $MATCH.

$` (Pre-Match Substring)

The string to the left of the match.

English - $PREMATCH.

$' (Post-Match Substring)

The string to the right of the match.

English - $POSTMATCH.

$+ (Last Matched Group)

The last group matched.

English - $LAST_PAREN_MATCH.

$1, $2, Etc. (Matched Group)

For $n the nth group of the match.

No English.

Separators

$/ (Input Record Separator)

An input record separator, initially newline. Set by the [command-line option -0].

Setting to non-nil value by other than the command-line option is deprecated.

English - $INPUT_RECORD_SEPARATOR, $RS.

Aliased as $-0.

$</code> (Output Record Separator)

An output record separator, initially {nil}.

Copied from $/ when the [command-line option -l] is given.

Setting to non-nil value by other than the command-line option is deprecated.

English - $OUTPUT_RECORD_SEPARATOR, $ORS.

Streams

$stdin (Standard Input)

The current standard input stream; initially:

$stdin # => #<IO:<STDIN>>

$stdout (Standard Output)

The current standard output stream; initially:

$stdout # => #<IO:<STDOUT>>

$stderr (Standard Error)

The current standard error stream; initially:

$stderr # => #<IO:<STDERR>>

$< (ARGF or $stdin)

Points to stream ARGF if not empty, else to stream $stdin; read-only.

English - $DEFAULT_INPUT.

$> (Default Standard Output)

An output stream, initially $stdout.

English - $DEFAULT_OUTPUT

$. (Input Position)

The input position (line number) in the most recently read stream.

English - $INPUT_LINE_NUMBER, $NR

$_ (Last Read Line)

The line (string) from the most recently read stream.

English - $LAST_READ_LINE.

Processes

$0

Initially, contains the name of the script being executed; may be reassigned.

$* (ARGV)

Points to ARGV.

English - $ARGV.

$$ (Process ID)

The process ID of the current process. Same as {Process.pid}.

English - $PROCESS_ID, $PID.

$? (Child Status)

Initially {nil}, otherwise the {Process::Status} object created for the most-recently exited child process; thread-local.

English - $CHILD_STATUS.

$LOAD_PATH (Load Path)

Contains the array of paths to be searched by {Kernel.load} and {Kernel.require}.

Singleton method $LOAD_PATH.resolve_feature_path(feature) returns:

  • [:rb, path], where {path} is the path to the Ruby file to be loaded for the given feature.
  • [:so, path], where {path} is the path to the shared object file to be loaded for the given feature.
  • {nil} if there is no such {feature} and {path}.

Examples:

$LOAD_PATH.resolve_feature_path('timeout')
# => [:rb, "/snap/ruby/317/lib/ruby/3.2.0/timeout.rb"]
$LOAD_PATH.resolve_feature_path('date_core')
# => [:so, "/snap/ruby/317/lib/ruby/3.2.0/x86_64-linux/date_core.so"]
$LOAD_PATH.resolve_feature_path('foo')
# => nil

Aliased as $: and $-I.

$LOADED_FEATURES

Contains an array of the paths to the loaded files:

$LOADED_FEATURES.take(10)
# =>
["enumerator.so",
 "thread.rb",
 "fiber.so",
 "rational.so",
 "complex.so",
 "ruby2_keywords.rb",
 "/snap/ruby/317/lib/ruby/3.2.0/x86_64-linux/enc/encdb.so",
 "/snap/ruby/317/lib/ruby/3.2.0/x86_64-linux/enc/trans/transdb.so",
 "/snap/ruby/317/lib/ruby/3.2.0/x86_64-linux/rbconfig.rb",
 "/snap/ruby/317/lib/ruby/3.2.0/rubygems/compatibility.rb"]

Aliased as $".

Debugging

$FILENAME

The value returned by method {ARGF.filename}.

$DEBUG

Initially {true} if [command-line option -d] or [--debug][command-line option -d] is given, otherwise initially {false}; may be set to either value in the running program.

When {true}, prints each raised exception to $stderr.

Aliased as $-d.

$VERBOSE

Initially {true} if [command-line option -v] or [command-line option -w] is given, otherwise initially {false}; may be set to either value, or to {nil}, in the running program.

When {true}, enables Ruby warnings.

When {nil}, disables warnings, including those from {Kernel.warn}.

Aliased as $-v and $-w.

Other Variables

$-F

The default field separator in {String#split;} must be a String or a Regexp, and can be set with [command-line option -F].

Setting to non-nil value by other than the command-line option is deprecated.

Aliased as $;.

$-a

Whether [command-line option -a] was given; read-only.

$-i

Contains the extension given with [command-line option -i], or {nil} if none.

An alias of {ARGF.inplace_mode}.

$-l

Whether [command-line option -l] was set; read-only.

$-p

Whether [command-line option -p] was given; read-only.

$F

If the [command-line option -a] is given, the array obtained by splitting $_ by $-F is assigned at the start of each -l/-p loop.

Deprecated

$=

$,

Pre-Defined Global Constants

Summary

Streams

Constant Contains
{STDIN} Standard input stream.
{STDOUT} Standard output stream.
{STDERR} Standard error stream.

Environment

Constant Contains
{ENV} Hash of current environment variable names and values.
{ARGF} String concatenation of files given on the command line, or $stdin if none.
{ARGV} Array of the given command-line arguments.
{TOPLEVEL_BINDING} Binding of the top level scope.
{RUBY_VERSION} String Ruby version.
{RUBY_RELEASE_DATE} String Ruby release date.
{RUBY_PLATFORM} String Ruby platform.
{RUBY_PATCH_LEVEL} String Ruby patch level.
{RUBY_REVISION} String Ruby revision.
{RUBY_COPYRIGHT} String Ruby copyright.
{RUBY_ENGINE} String Ruby engine.
{RUBY_ENGINE_VERSION} String Ruby engine version.
{RUBY_DESCRIPTION} String Ruby description.

Embedded Data

Constant Contains
{DATA} File containing embedded data (lines following {__END__}, if any).

Streams

{STDIN}

The standard input stream (the default value for $stdin):

STDIN # => #<IO:<STDIN>>

{STDOUT}

The standard output stream (the default value for $stdout):

STDOUT # => #<IO:<STDOUT>>

{STDERR}

The standard error stream (the default value for $stderr):

STDERR # => #<IO:<STDERR>>

Environment

{ENV}

A hash of the contains current environment variables names and values:

ENV.take(5)
# =>
[["COLORTERM", "truecolor"],
 ["DBUS_SESSION_BUS_ADDRESS", "unix:path=/run/user/1000/bus"],
 ["DESKTOP_SESSION", "ubuntu"],
 ["DISPLAY", ":0"],
 ["GDMSESSION", "ubuntu"]]

{ARGF}

The virtual concatenation of the files given on the command line, or from $stdin if no files were given, "-" is given, or after all files have been read.

{ARGV}

An array of the given command-line arguments.

{TOPLEVEL_BINDING}

The Binding of the top level scope:

TOPLEVEL_BINDING # => #<Binding:0x00007f58da0da7c0>

{RUBY_VERSION}

The Ruby version:

RUBY_VERSION # => "3.2.2"

{RUBY_RELEASE_DATE}

The release date string:

RUBY_RELEASE_DATE # => "2023-03-30"

{RUBY_PLATFORM}

The platform identifier:

RUBY_PLATFORM # => "x86_64-linux"

{RUBY_PATCHLEVEL}

The integer patch level for this Ruby:

RUBY_PATCHLEVEL # => 53

For a development build the patch level will be -1.

{RUBY_REVISION}

The git commit hash for this Ruby:

RUBY_REVISION # => "e51014f9c05aa65cbf203442d37fef7c12390015"

The copyright string:

RUBY_COPYRIGHT
# => "ruby - Copyright (C) 1993-2023 Yukihiro Matsumoto"

{RUBY_ENGINE}

The name of the Ruby implementation:

RUBY_ENGINE # => "ruby"

{RUBY_ENGINE_VERSION}

The version of the Ruby implementation:

RUBY_ENGINE_VERSION # => "3.2.2"

{RUBY_DESCRIPTION}

The description of the Ruby implementation:

RUBY_DESCRIPTION
# => "ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]"

Embedded Data

{DATA}

Defined if and only if the program has this line:

__END__

When defined, {DATA} is a File object containing the lines following the {__END__}, positioned at the first of those lines:

p DATA
DATA.each_line { |line| p line }
__END__

Output:

{#<}File:t.rb>
"Foo\n"
"Bar\n"
"Baz\n"