Perl Cheatsheet
Data Formats and Dates
Use this Perl reference while you build software engineering projects, review code, or refresh the syntax you reach for most.
JSON With Core Modules
use JSON::PP qw(encode_json decode_json); my $data = decode_json('{"ok":true,"count":2}'); print $data->{count}, "\n"; my $json = encode_json({ ok => 1, names => ["Ada", "Grace"] });
JSON::PP ships with modern Perl. Many production apps use Cpanel::JSON::XS or JSON::MaybeXS for speed and compatibility.
CSV
use Text::CSV; my $csv = Text::CSV->new({ binary => 1, auto_diag => 1 }); open my $fh, '<:encoding(UTF-8)', 'users.csv' or die $!; while (my $row = $csv->getline($fh)) { my ($name, $email) = @$row; print "$name <$email>\n"; }
Avoid splitting CSV with a plain comma regex when quoted fields or embedded commas are possible.
Dates and Times
use Time::Piece; my $now = localtime; print $now->strftime('%Y-%m-%d %H:%M:%S'), "\n"; my $day = Time::Piece->strptime('2026-06-23', '%Y-%m-%d');
Use modules for parsing and formatting. For serious timezone work, reach for DateTime from CPAN.
Paths
use File::Spec; use File::Basename qw(dirname basename); my $path = File::Spec->catfile('data', 'input.txt'); print basename($path), "\n"; print dirname($path), "\n";
File::Spec avoids hardcoding / or platform-specific path rules.
Directory Traversal
opendir my $dh, 'logs' or die $!; while (my $entry = readdir $dh) { next if $entry =~ /^\.\.?$/; print "$entry\n"; } closedir $dh;
Skip . and ... For recursive walking, use File::Find.
Environment Variables
my $database_url = $ENV{DATABASE_URL} // die "DATABASE_URL missing\n"; $ENV{APP_ENV} = 'test';
Environment variables are strings. Validate required values at startup instead of failing halfway through a job.
Unicode I/O
use open qw(:std :encoding(UTF-8)); open my $fh, '<:encoding(UTF-8)', $path or die $!;
Be explicit about encodings at boundaries. Perl's internal strings and external byte streams are different concerns.