Skip to content

Instantly share code, notes, and snippets.

@jooeycheng
Forked from dvliman/gist:10402435
Last active March 17, 2023 19:05
Show Gist options
  • Save jooeycheng/5701457728f8162ad2fa8ca8323430e5 to your computer and use it in GitHub Desktop.
Save jooeycheng/5701457728f8162ad2fa8ca8323430e5 to your computer and use it in GitHub Desktop.
ruby dollar sign $ global variable
$: (Dollar Colon) is basically a shorthand version of $LOAD_PATH.
contains an array of paths that your script will search through when using require.
$0 (Dollar Zero) contains the name of the ruby program being run. This is typically the script name.
$* (Dollar Splat) is basically shorthand for ARGV. $* contains the command line arguments that were passed to the script.
$? (Dollar Question Mark) returns the exit status of the last child process to finish.
$$ (Dollar Dollar) returns the process number of the program currently being ran.
$~ (Dollar Tilde) contains the MatchData from the previous successful pattern match.
$1, $2, $3, $4 etc represent the content of the previous successful pattern match.
$& (Dollar Ampersand) contains the matched string from the previous successful pattern match.
$+ (Dollar Plus) contains the last match from the previous successful pattern match.
$` (Dollar Backtick) contains the string before the actual matched string of the previous successful pattern match.
$’ (Dollar Apostrophe) contains the string after the actual matched string of the previous successful pattern match.
$! (Dollar Bang) contains the Exception that was passed to raise.
$@ (Dollar At Symbol) contains the backtrace for the last Exception raised.
Alternate Explaination (from diff site)
$! latest error message
$@ location of error
$_ string last read by gets
$. line number last read by interpreter
$& string last matched by regexp
$~ the last regexp match, as an array of subexpressions
$n the nth subexpression in the last match (same as $~[n])
$= case-insensitivity flag
$/ input record separator
$\ output record separator
$0 the name of the ruby script file
$* the command line arguments
$$ interpreter's process ID
$? exit status of last executed child process
@sergio-opslevel
Copy link

sergio-opslevel commented Mar 17, 2023

$! and $@ don't seem to work anymore in Ruby v3.0.5. Is this a bug? Anyone know a new way to access last exception?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment