This is an old revision of the document!
Perl Cheat Sheet
Perl is a highly capable, feature-rich programming language with over 25 years of development. These notes follow the path of the Learning Perl book.
First line should be #!/usr/bin/perl or #!/usr/bin/env perl
Perl compiles to byte-code before executing
Do not use an extension for scripts.
To specify a minimum version use “use 5.010;”
Semicolons (;) required to separate statements
“perl -w” turns on warnings for entire program. For just the current file use “use warnings;”
“use diagnostics;” adds explanations to warnings
“use strict;” requires variable declaration
Comments start with # (no block comments)
Parenthesis are optional unless part of syntax.
Numbers
All numbers are stored in the same format e.g.-6.5e24, 037 (octal), 0x2a13b (hex), 0b11010 (binary)
Underscores for readability are ignored e.g. 0x1377_0B77
Arithmetic operators are * / + - % (modulus) ** (exponentiation)
Comparison operators are < ⇐ == >= > !=
Strings
To use unicode in source code - “use utf8;”
Single-quoted literals '⅚∞☃☠' can contain any character except single-quote (use \') and backslash (use \\).
Double-quoted strings can contain control-characters starting with a backslash and are variable interpolated e/g/ “${var}s $var\n”.
. is for concatenation, x for string repetition.
To insert a character by code - chr(0x05d0). To convert a character to its code - ord('א')
String comparison operators are lt, le, eq, ge, gt, and ne
Scalar Variables
Scalars are numbers or strings (or undefined or references), used interchangeably.
$calar variables start with $ and a letter or underscore, but can contain letters (including unicode), numbers or underscores.
Scalar assignment looks like $a = 3; or $a .= “suffix”; or $a **= 3;
Recommended to use all lowercase variable names with underscores for word separation e.g. $var_name
print takes a single scalar or a list of scalars (separated by commas)
When a scalar is interpreted as a boolean, the following are false : 0, '0', '', undefined .
!! is a handy shortcut to convert any scalar to 0 or 1 (to represent a boolean)
Variables have value undef before being assigned. undef acts as a 0 or “” as needed, but will throw a warning if printed.
defined() checks if a variable has been defined. Can also set a variable to undef.
Lists and Arrays
A list is an ordered set of elements (each of which is a scalar value), starting with position 0.
@rrays are variables that store a list (separate namespace from scalar variables). @x refers to entire array x.
Undefined arrays start out as (), the empty list and not undef.
To access an element of an array - $myarr[0] - undef if never set.
Index of last element is in $#arr
Negative array indices wrap around (only once) so -1 refers to last element.
Literal lists - ('abc','def') or (1..6) (integers 1 to 6) or qw(abc def) or qw#abc def# (quoted by whitespace).
Can assign list values to variables e.g.
($fred, $barney, $dino) = ("flintstone", "rubble", undef);
($fred, $barney) = ($barney, $fred); # swap those values
push adds element(s) to end of array. pop removes a single element and returns it.
unshift adds element(s) to start of array. shift removes a single element and returns it.
splice removes elements from middle of array, returns them and optionally replaces them
splice @arr, start, len, @newelems
sort and reverse functions return the modified list (can be saved to original array variable).
Expressions parsed in either a scalar context or a list context. Scalars are promoted to single-element lists in list context.
List functions may return different scalars - array variables return number of elements. The scalar function forces a scalar context e.g. for print function.
Control Structures
if-elsif-else
if ($a == $b) {
a = 0;
} elsif ($a > $b) {
a = 1;
} else {
a = -1;
}
while loop
$count=0;
while ($count < 10) {
$count += 2;
}
foreach loop
foreach my $rock (@rocks) {
# modifications to $rock modify the list element
# $_ is used if loop variable is omitted
}
User Subroutines
Subroutines are in their own namespace and are typically called using &mysub (sometimes the ampersand can be omitted).
Subroutines can be defined anywhere e.g.
sub mysub {
my($m, $n) = @_
$m + $n;
}
The value of the last expression evaluated is returned. But return $a; can be used to return immediately.
Arguments are in the list @_ . If &mysub; is used, the parent's argument list is inherited.
Lexical scoped variables can be used in any block by prefixing with my.
Ampersand is optional if subroutine has previously been declared or if parenthesis are used. Ampersand is not optional if built-in subroutine is being overridden.