# 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: ```ruby 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 | | | `$\` | `$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: ```ruby begin raise RuntimeError.new('Boo!') rescue RuntimeError p $! end ``` Output: ``` # ``` English - `$ERROR_INFO` ### `$@` (Backtrace) Same as `$!.backtrace`; returns an array of backtrace positions: ```ruby begin raise RuntimeError.new('Boo!') rescue RuntimeError pp $@.take(4) end ``` Output: ``` ["(irb):338:in `'", "/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}[rdoc-ref: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`. ### `$\` (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: ```ruby $stdin # => #> ``` ### `$stdout` (Standard Output) The current standard output stream; initially: ```ruby $stdout # => #> ``` ### `$stderr` (Standard Error) The current standard error stream; initially: ```ruby $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: ```ruby $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: ```ruby $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 [`-w`][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`): ```ruby STDIN # => #> ``` ### `STDOUT` The standard output stream (the default value for `$stdout`): ```ruby STDOUT # => #> ``` ### `STDERR` The standard error stream (the default value for `$stderr`): ```ruby STDERR # => #> ``` ## Environment ### `ENV` A hash of the contains current environment variables names and values: ```ruby 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: ```ruby TOPLEVEL_BINDING # => # ``` ### `RUBY_VERSION` The Ruby version: ```ruby RUBY_VERSION # => "3.2.2" ``` ### `RUBY_RELEASE_DATE` The release date string: ```ruby RUBY_RELEASE_DATE # => "2023-03-30" ``` ### `RUBY_PLATFORM` The platform identifier: ```ruby RUBY_PLATFORM # => "x86_64-linux" ``` ### `RUBY_PATCHLEVEL` The integer patch level for this Ruby: ```ruby RUBY_PATCHLEVEL # => 53 ``` For a development build the patch level will be -1. ### `RUBY_REVISION` The git commit hash for this Ruby: ```ruby RUBY_REVISION # => "e51014f9c05aa65cbf203442d37fef7c12390015" ``` ### `RUBY_COPYRIGHT` The copyright string: ```ruby RUBY_COPYRIGHT # => "ruby - Copyright (C) 1993-2023 Yukihiro Matsumoto" ``` ### `RUBY_ENGINE` The name of the Ruby implementation: ```ruby RUBY_ENGINE # => "ruby" ``` ### `RUBY_ENGINE_VERSION` The version of the Ruby implementation: ```ruby RUBY_ENGINE_VERSION # => "3.2.2" ``` ### `RUBY_DESCRIPTION` The description of the Ruby implementation: ```ruby 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: ```ruby __END__ ``` When defined, `DATA` is a File object containing the lines following the `__END__`, positioned at the first of those lines: ```ruby p DATA DATA.each_line { |line| p line } __END__ Foo Bar Baz ``` Output: ``` # "Foo\n" "Bar\n" "Baz\n" ``` [command-line option `-0`]: rdoc-ref:language/options.md@0-3A+Set+-24-2F+-28Input+Record+Separator-29 [command-line option `-F`]: rdoc-ref:language/options.md@F-3A+Set+Input+Field+Separator [command-line option `-a`]: rdoc-ref:language/options.md@a-3A+Split+Input+Lines+into+Fields [command-line option `-d`]: rdoc-ref:language/options.md@d-3A+Set+-24DEBUG+to+true [command-line option `-i`]: rdoc-ref:language/options.md@i-3A+Set+ARGF+In-Place+Mode [command-line option `-l`]: rdoc-ref:language/options.md@l-3A+Set+Output+Record+Separator-3B+Chop+Lines [command-line option `-p`]: rdoc-ref:language/options.md@p-3A+-n-2C+with+Printing [command-line option `-v`]: rdoc-ref:language/options.md@v-3A+Print+Version-3B+Set+-24VERBOSE [command-line option `-w`]: rdoc-ref:language/options.md@w-3A+Synonym+for+-W1