PERLCHEAT(1)

πŸ’– PERLCHEAT(1) β€” the Perl 5 Cheat Sheet πŸ’–

okay so this page lives in the Perl Programmers Reference Guide and its manual name is PERLCHEAT(1), and bestie, it is literally a cheat sheet. group-chat energy: engaged. let's go πŸ¦‹


✨ NAME ✨

perlcheat β€” Perl 5 Cheat Sheet. that's the name. short, sweet, slays.


πŸŽ€ DESCRIPTION πŸŽ€

so this "cheat sheet" is a handy lil reference, and it's made for beginning Perl programmers β€” like, if you're just starting out, this is your girl. is everything in here? no. not everything is mentioned. but the 195 features that are here may already be overwhelming ngl 😭 one hundred and ninety-five. that's a lot of features. hydrate.

πŸ“œ The sheet πŸ“œ

here it is, the whole entire thing, no edits, no notes, just vibes:

  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
                             SYNTAX
  OPERATOR PRECEDENCE    foreach (LIST) { }     for (a;b;c) { }
  ->                     while   (e) { }        until (e)   { }
  ++ --                  if      (e) { } elsif (e) { } else { }
  **                     unless  (e) { } elsif (e) { } else { }
  ! ~ \ u+ u-            given   (e) { when (e) {} default {} }
  =~ !~
  * / % x                 NUMBERS vs STRINGS  FALSE vs TRUE
  + - .                   =          =        undef, "", 0, "0"
  << >>                   +          .        anything else
  named uops              == !=      eq ne
  < > <= >= lt gt le ge   < > <= >=  lt gt le ge
  == != <=> eq ne cmp ~~  <=>        cmp
  &
  | ^             REGEX MODIFIERS       REGEX METACHARS
  &&              /i case insensitive   ^      string begin
  || //           /m line based ^$      $      str end (bfr \n)
  .. ...          /s . includes \n      +      one or more
  ?:              /x /xx ign. wh.space  *      zero or more
  = += last goto  /p preserve           ?      zero or one
  , =>            /a ASCII    /aa safe  {3,7}  repeat in range
  list ops        /l locale   /d  dual  |      alternation
  not             /u Unicode            []     character class
  and             /e evaluate /ee rpts  \b     boundary
  or xor          /g global             \z     string end
                  /o compile pat once   (p)    capture
  DEBUG                                 (?:p)  no capture
  -MO=Deparse     REGEX CHARCLASSES     (?#t)  comment
  -MO=Terse       .   [^\n]             (?=p)  ZW pos ahead
  -D##            \s  whitespace        (?!p)  ZW neg ahead
  -d:Trace        \w  word chars        (?<=p) ZW pos behind \K
                  \d  digits            (?<!p) ZW neg behind
  CONFIGURATION   \pP named property    (?>p)  no backtrack
  perl -V:ivsize  \h  horiz.wh.space    (?|p|p)branch reset
                  \R  linebreak         (?<n>p)named capture
                  \S \W \D \H negate    \g{n}  ref to named cap
                                        \K     keep left part
  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

so when you're staring at that and your eyes go 🫠, here's the map of what's in there: CONTEXTS, SIGILS, ref, ARRAYS, HASHES, REFERENCES, OPERATOR PRECEDENCE, SYNTAX, NUMBERS vs STRINGS, FALSE vs TRUE, REGEX MODIFIERS, REGEX METACHARS, REGEX CHARCLASSES, DEBUG, CONFIGURATION, FUNCTION RETURN LISTS, and SPECIAL VARIABLES. seventeen little neighborhoods of Perl knowledge, all in one screen. obsessed. πŸ’…


🌸 ACKNOWLEDGEMENTS 🌸

the very first version of this document showed up on Perl Monks, where a bunch of people had useful suggestions. thank you, Perl Monks 🫢 you ate.

and a special thanks to Damian Conway, who didn't only suggest important changes β€” he also took the time to count the number of listed features (the 195!! the legend did the math 😭) and to make a Raku version, just to show that Perl will stay Perl. king behavior fr fr πŸ‘‘


πŸ‘‘ AUTHOR πŸ‘‘

Juerd Waalboer <#####@juerd.nl>, with the help of many Perl Monks.


πŸ”₯ SEE ALSO πŸ”₯


and that's the whole page bestie. go forth and cheat (on your memory, not on your tests). no cap. ✨

this one's from perl v5.42.3, dated 2026-08-03 β€” that's the version, that's the date, and honestly? the sheet still goes hard. mwah πŸ’–πŸŽ€πŸ¦‹πŸŒΈ

πŸ“¦ where this page comes from