This is one area where Matz kept too much of Perl. Thankfully, it's rare to see Ruby programmers making heavy use of these.
IMO they can make code easier to understand, once you've learned what they mean. $2 conveys the same idea as matches[2] without having to think about array indices, and why the matches aren't zero-indexed like a normal array. This is obviously totally subjective.
{
# level 1
local $\ = "[1]\n";
some_print_operation();
{
# level 2
local $\ = "[2]\n";
some_print_operation();
}
# level 1 again
some_print_operation();
}
# $\ back to what it was before all this :) foo.map { |x| x.something rescue $! }