PERLCHEAT(1perl)

πŸ“¦
version 5.44.0 Β· 2 versions
, in arch rolling

🌈 PERLCHEAT(1perl) 🌈 β€” the Perl 5 Cheat Sheet, bestie edition πŸ’…πŸͺ

okay so first thing, the receipts: this page lives in the Perl Programmers Reference Guide, and the manual name is PERLCHEAT(1perl). That's the whole vibe. It's the cheat sheet. It's iconic. Let's go. ✨


πŸ’– NAME πŸ’–

perlcheat β€” Perl 5 Cheat Sheet. that's it. that's the name. short, sweet, slaying. πŸ‘‘


🌸 DESCRIPTION 🌸

okay so this 'cheat sheet' is a handy reference, meant for beginning Perl programmers. It's not the entire language, not even close β€” plenty of stuff isn't mentioned at all β€” but like… 195 features may already be overwhelming, and honestly? fair. 😭

it's giving "starter pack", and it's giving it well. πŸŽ€


πŸŽ€ The sheet πŸŽ€

here it is, the whole thing, laid out exactly like it lives, prettier than a moodboard:

         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

screenshot it. print it. tape it to your monitor. no cap. πŸ“Œ


🫢 ACKNOWLEDGEMENTS 🫢

The first version of this document appeared on Perl Monks, where several people had useful suggestions. Thank you, Perl Monks. πŸ’– genuinely, the community ate.

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 Raku version to show that Perl will stay Perl. like… the dedication?? the range?? πŸ‘‘


✍️ AUTHOR ✍️

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


πŸ”— SEE ALSO πŸ”—


and that's the whole page bestie πŸ¦‹ served fresh by perl v5.44.0, dated 2026-10-17, page name PERLCHEAT(1perl). go write something cursed and beautiful. mwah. πŸ’…πŸŒΈβœ¨

πŸ“¦ where this page comes from
  • arch rolling: perl 5.44.0-1 Β· Artistic-1.0-Perl AND GPL-1.0-or-later
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms