Ruby Traps
Matz, the creator of Ruby, stole heavily from Perl (and we think he chose a pretty good starting point). Actually, he put a Perl and a Smalltalk in a room and let them breed.
There’s no irb. See the Python section.
Perl just has numbers. It doesn’t care whether they have fractional portions or not.
You don’t need to surround variables with
{}(#{}in Ruby) to interpolate them, unless you need to disambiguate the identifier from the string around it:"My favorite language is $lang"
Perl interpolated strings don’t have to be double-quoted: they can use
qqwith arbitrary delimiters. Similarly, generic uninterpolated strings don’t have to use single quotes: they can use aqwith arbitrary delimiters.q/That's all, folks/ q(No interpolation for $100) qq(Interpolation for $animal)
You need to separate all Perl statements with a
;, even if they are on different lines. The final statement in a block doesn’t need a final;.The case of variable names in Perl don’t mean anything to perl.
The sigils don’t denote variable scope, nor even type. A
$in Perl is a single item, like$scalar,$array[0], or$hash{$key}.Perl compares strings with
lt,le,eq,ne,ge, andgt.No magic blocks, but see
PerlX::MethodCallWithBlock.Perl’s subroutine definitions are compile-phase. So:
use v5.10; sub foo { say "Camelia" } foo(); sub foo { say "Amelia" }; foo();This prints
Ameliatwice, because the last definition is in place before the run-phase statements execute. This also means that the call to a subroutine ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access