perlcheat - Perl 5 Cheat Sheet
This 'cheat sheet' is a handy reference, meant for beginning Perl programmers. Not everything is mentioned, but 195 features may already be overwhelming.
CONTEXTS SIGILS ref ARRAYS HASHES
void $scalar SCALAR @array %hash
scalar @array ARRAY @array[0, 2] @hash{'a', 'b'}
list %hash HASH $array[0] $hash{'a'}
&sub CODE
*glob GLOB SCALAR VALUES
FORMAT number, string, ref, glob, undef
REFERENCES
\ reference $$foo[1] aka $foo->[1]
$@%&* dereference $$foo{bar} aka $foo->{bar}
[] anon. arrayref ${$$foo[1]}[2] aka $foo->[1]->[2]
{} anon. hashref ${$$foo[1]}[2] aka $foo->[1][2]
\() list of refs
NUMBERS vs STRINGS LINKS
OPERATOR PRECEDENCE = = perldoc.perl.org
-> + . search.cpan.org
++ -- == != eq ne cpan.org
** < > <= >= lt gt le ge pm.org
! ~ \ u+ u- <=> cmp p3rl.org
=~ !~ perlmonks.org
* / % x SYNTAX
+ - . foreach (LIST) { } for (a;b;c) { }
<< >> while (e) { } until (e) { }
named uops if (e) { } elsif (e) { } else { }
< > <= >= lt gt le ge unless (e) { } elsif (e) { } else { }
== != <=> eq ne cmp ~~ given (e) { when (e) {} default {} }
&
| ^ REGEX METACHARS REGEX MODIFIERS
&& ^ string begin /i case insensitive
|| // $ str end (bfr \n) /m line based ^$
.. ... + one or more /s . includes \n
?: * zero or more /x ignore wh.space
= += -= *= etc ? zero or one /p preserve
, => {3,7} repeat in range /a ASCII /aa safe
list ops | alternation /l locale /d dual
not [] character class /u Unicode
and \b word boundary /e evaluate /ee rpts
or xor \z string end /g global
() capture /o compile pat once
DEBUG (?:p) no capture
-MO=Deparse (?#t) comment REGEX CHARCLASSES
-MO=Terse (?=p) ZW pos ahead . [^\n]
-D## (?!p) ZW neg ahead \s whitespace
-d:Trace (?<=p) ZW pos behind \K \w word chars
(?<!p) ZW neg behind \d digits
CONFIGURATION (?>p) no backtrack \pP named property
perl -V:ivsize (?|p|p)branch reset \h horiz.wh.space
(?&NM) cap to name \R linebreak
\S \W \D \H negate
FUNCTION RETURN LISTS
stat localtime caller SPECIAL VARIABLES
0 dev 0 second 0 package $_ default variable
1 ino 1 minute 1 filename $0 program name
2 mode 2 hour 2 line $/ input separator
3 nlink 3 day 3 subroutine $\ output separator
4 uid 4 month-1 4 hasargs $| autoflush
5 gid 5 year-1900 5 wantarray $! sys/libcall error
6 rdev 6 weekday 6 evaltext $@ eval error
7 size 7 yearday 7 is_require $$ process ID
8 atime 8 is_dst 8 hints $. line number
9 mtime 9 bitmask @ARGV command line args
10 ctime 10 hinthash @INC include paths
11 blksz 3..10 only @_ subroutine args
12 blcks with EXPR %ENV environment
The first version of this document appeared on Perl Monks, where several people had useful suggestions. Thank you, Perl Monks.
A special thanks to Damian Conway, who didn't only suggest important changes, but also took the time to count the number of listed features and make a Perl 6 version to show that Perl will stay Perl.
Juerd Waalboer <#####@juerd.nl>, with the help of many Perl Monks.
http://perlmonks.org/?node_id=216602 - the original PM post
http://perlmonks.org/?node_id=238031 - Damian Conway's Perl 6 version
http://juerd.nl/site.plp/perlcheat - home of the Perl Cheat Sheet