Perl still solves the jobs that turn shell pipelines into unreadable knots, especially when you are cleaning logs, reshaping text, or keeping older admin scripts alive. Most people who need to install Perl on Ubuntu only need the package from Ubuntu’s repositories, while a separate source build makes sense when you want the newest upstream branch under /usr/local.
On Ubuntu, the package name is simply perl, while many add-on modules follow the lib...-perl naming pattern. Ubuntu 26.04 ships Perl 5.40.1 by default, Ubuntu 24.04 ships 5.38.2, and Ubuntu 22.04 ships 5.34.0, so the APT method is the cleanest way to download and install Perl on supported LTS releases before you reach for CPAN or a source build.
Install Perl on Ubuntu
Ubuntu’s default APT sources currently provide Perl 5.40.1 on Ubuntu 26.04, 5.38.2 on Ubuntu 24.04, and 5.34.0 on Ubuntu 22.04. Perl.org currently lists Perl 5.42.2 as the latest stable source release, so Ubuntu’s package is the safer default and a source build is the better fit only when you need newer upstream Perl.
| Method | Channel | Version | Updates | Best For |
|---|---|---|---|---|
| APT package | Ubuntu package index | Distribution default | Automatic via APT | Most servers, workstations, and admin scripts |
| Source build | Perl.org source downloads | Latest stable | Manual rebuild | Newer upstream Perl or a separate /usr/local runtime |
APT is the right default on most systems because it keeps Perl aligned with Ubuntu packages and security updates. Build from source only when the packaged branch is too old for your project or you deliberately want a separate runtime outside Ubuntu’s package database.
Install Perl from Ubuntu APT Packages
Start with Ubuntu’s packaged Perl unless you already know you need the newer upstream build.
Check the Existing Perl Installation on Ubuntu
Check whether Ubuntu already has a Perl interpreter available:
perl -v | head -2
This is perl 5, version 40, subversion 1 (v5.40.1) built for x86_64-linux-gnu-thread-multi
Ubuntu 24.04 prints v5.38.2, and Ubuntu 22.04 prints v5.34.0. If this already works but cpan or perldoc is missing, Ubuntu is probably giving you the essential perl-base runtime rather than the full perl package.
Update the Ubuntu Package Index for Perl
Refresh APT metadata before installing the full package:
sudo apt update
If your account does not have sudo access yet, set that up first with add a new user to sudoers on Ubuntu.
Install the Perl Package on Ubuntu
Install Ubuntu’s full Perl package and its standard tooling:
sudo apt install perl
Check the installed package state after APT finishes:
apt-cache policy perl | sed -n '1,3p'
perl: Installed: 5.40.1-7build1 Candidate: 5.40.1-7build1
On Ubuntu 24.04 the same check reports 5.38.2-3.2ubuntu0.2, and on Ubuntu 22.04 it reports 5.34.0-3ubuntu1.5. If perl -v already worked before this step, the main difference now is that the full package adds tools such as cpan and perldoc.
Install Common Perl Modules on Ubuntu
Ubuntu packages many common extras separately, so you can keep the base install small and add only what your scripts need.
perl-docadds the standard language manuals and reference pages.libperl-devinstalls headers and development files for native extensions.libjson-perlhandles JSON parsing and serialization.libdatetime-perladds higher-level date and time handling.libdbd-mysql-perladds DBI access for MySQL and MariaDB.
For example, this installs Perl with the documentation, development headers, and a common JSON module:
sudo apt install perl perl-doc libperl-dev libjson-perl
Find Additional Perl Modules on Ubuntu
Ubuntu names most repository modules with the lib...-perl pattern, so a targeted search is usually faster than scanning the full package list. The grep command guide explains the filtering step in more detail if you want it.
apt-cache search perl | grep mysql
libclass-dbi-mysql-perl - extensions to Class::DBI for MySQL libcrypt-mysql-perl - Perl module to emulate the MySQL PASSWORD() function libdatetime-format-mysql-perl - module to parse and format MySQL dates and times libdbd-mysql-perl - Perl5 database interface to the MariaDB/MySQL database libdbix-bulkloader-mysql-perl - Perl extension for MySQL bulk loading libmysql-diff-perl - module for comparing the table structure of two MySQL databases libtime-piece-mysql-perl - module adding MySQL-specific methods to Time::Piece
Install a matching module once you find the package you need:
sudo apt install libdbd-mysql-perl
Compile Perl from Source on Ubuntu
Compile Perl from source when you need Perl 5.42.2 now or want it isolated under /usr/local instead of replacing Ubuntu’s packaged files.
Install Perl Build Dependencies on Ubuntu
Install the compiler toolchain and the libraries Perl detects during configuration. If you want more detail on the compiler side, see install GCC on Ubuntu.
sudo apt install build-essential curl libgdbm-dev libdb-dev libgdbm-compat-dev zlib1g-dev
build-essentialprovidesgcc,make, and the rest of the core build toolchain.curlfetches the latest stable tarball without hardcoding a version.libgdbm-devandlibgdbm-compat-devadd GDBM and NDBM support.libdb-devandzlib1g-devadd Berkeley DB and compression support.
Create a Perl Build Workspace on Ubuntu
Keep the source tree and update files under your home directory so future updates and removal stay manageable:
mkdir -p "$HOME/perl-build"
cd "$HOME/perl-build"
The $HOME variable expands to your own home directory, so this keeps the build files under your account instead of scattering them across system paths.
Download the Latest Perl Source on Ubuntu
Download the current stable tarball directly from Perl.org without hardcoding the version number. The curl command guide and grep command guide explain the pieces if you want more detail.
TARBALL="$(curl -fsSL https://www.perl.org/get.html | grep -oE 'perl-[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1)"
curl -fLO --progress-bar "https://www.cpan.org/src/5.0/$TARBALL"
printf 'Tarball: %s\n' "$TARBALL"
Tarball: perl-5.42.2.tar.gz
If you prefer a manual download, open the Perl.org download page, download the current stable tarball yourself, and set TARBALL to that filename before continuing. Keep using the same terminal session because the checksum and extraction steps reuse the $TARBALL variable.
Verify the Perl Tarball Checksum on Ubuntu
CPAN publishes a separate SHA256 file for the Perl tarball. That sidecar file contains only the hash value, so the next command reformats it for sha256sum -c.
CHECKSUM_FILE="${TARBALL}.sha256.txt"
curl -fLO --progress-bar "https://www.cpan.org/src/5.0/$CHECKSUM_FILE"
EXPECTED="$(tr -d '\n\r' < "$CHECKSUM_FILE")"
printf '%s %s\n' "$EXPECTED" "$TARBALL" | sha256sum -c -
perl-5.42.2.tar.gz: OK
Extract the Perl Source Tree on Ubuntu
Derive the source directory from the tarball name before extracting it, so you land in the correct folder even after future version bumps:
SOURCE_DIR="${TARBALL%.tar.gz}"
printf 'Source dir: %s\n' "$SOURCE_DIR"
tar -xzf "$TARBALL"
cd "$SOURCE_DIR"
Source dir: perl-5.42.2
Configure the Perl Build on Ubuntu
Configure Perl to accept the standard defaults and install the source build under /usr/local, which keeps it separate from Ubuntu’s packaged Perl under /usr/bin:
./Configure -des -Dprefix=/usr/local
Relevant output includes:
Now you must run 'make'. If you compile perl5 on a different machine or from a different object directory, copy the Policy.sh file from this object directory to the new one before you run Configure -- this will help you with most of the policy defaults.
Build Perl on Ubuntu
Compile the source tree before you run the test suite:
make
Relevant output includes:
Everything is up to date. Type 'make test' to run test suite.
Run the Perl Test Suite on Ubuntu
Run the upstream test suite before installing anything into /usr/local:
make test
Relevant output includes:
All tests successful.
The elapsed time varies with CPU speed, but the success line should still read All tests successful.
Install the Source-Built Perl on Ubuntu
Install the compiled tree and save the installed file list to a log that you can reuse later for removal:
sudo make install | tee "$HOME/perl-build/perl-install.log"
The tee command writes a copy of the install output to $HOME/perl-build/perl-install.log while still printing the installed paths on screen.
Verify the Source-Built Perl on Ubuntu
Check which Perl binary your shell now prefers and confirm the upstream version:
which perl
perl -v | head -2
/usr/local/bin/perl This is perl 5, version 42, subversion 2 (v5.42.2) built for x86_64-linux
Standard Ubuntu interactive shells already place /usr/local/bin before /usr/bin, so the source build becomes the active perl without editing .bashrc. When you add modules for this build, use /usr/local/bin/cpan so the source-built runtime keeps its own modules under /usr/local/lib/perl5 instead of mixing with Ubuntu’s packaged Perl tree.
Update Source-Built Perl on Ubuntu
APT updates the packaged Perl automatically, but a source build under /usr/local needs a manual rebuild when Perl.org publishes a new stable release.
Create the Perl Update Script on Ubuntu
Write the updater into the same build workspace so it can reuse your logs and source tree without leaving you in a text editor.
cat > "$HOME/perl-build/update-perl.sh" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
INSTALL_PREFIX="/usr/local"
BUILD_DIR="$HOME/perl-build"
LOG_FILE="$BUILD_DIR/perl-update.log"
INSTALL_LOG="$BUILD_DIR/perl-install.log"
for cmd in curl gcc make sha256sum; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "Install the build prerequisites first:"
echo "sudo apt install build-essential curl libgdbm-dev libdb-dev libgdbm-compat-dev zlib1g-dev"
exit 1
fi
done
CURRENT_VERSION=$($INSTALL_PREFIX/bin/perl -v 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -n 1 || echo "none")
TARBALL=$(curl -fsSL https://www.perl.org/get.html | grep -oE 'perl-[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1)
if [ -z "$TARBALL" ]; then
echo "Could not determine the latest Perl tarball from perl.org."
exit 1
fi
LATEST_VERSION=${TARBALL#perl-}
LATEST_VERSION=${LATEST_VERSION%.tar.gz}
echo "Current version: $CURRENT_VERSION"
echo "Latest version: v$LATEST_VERSION"
if [ "$CURRENT_VERSION" = "v$LATEST_VERSION" ]; then
echo "Perl is already up to date."
exit 0
fi
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
echo "$(date): Starting update to v$LATEST_VERSION" >> "$LOG_FILE"
find "$BUILD_DIR" -maxdepth 1 -type d -name 'perl-[0-9]*' -exec rm -rf {} +
rm -f perl-[0-9]*.tar.gz perl-[0-9]*.tar.gz.sha256.txt
curl -fL --retry 3 --retry-delay 2 --retry-connrefused --progress-bar -o "$TARBALL" "https://www.cpan.org/src/5.0/$TARBALL"
CHECKSUM_FILE="${TARBALL}.sha256.txt"
curl -fL --retry 3 --retry-delay 2 --retry-connrefused --progress-bar -o "$CHECKSUM_FILE" "https://www.cpan.org/src/5.0/$CHECKSUM_FILE"
EXPECTED="$(tr -d '\n\r' < "$CHECKSUM_FILE")"
printf '%s %s\n' "$EXPECTED" "$TARBALL" | sha256sum -c -
SOURCE_DIR="${TARBALL%.tar.gz}"
tar -xzf "$TARBALL"
cd "$SOURCE_DIR"
./Configure -des -Dprefix="$INSTALL_PREFIX"
make
make test
sudo make install | tee "$INSTALL_LOG"
NEW_VERSION=$($INSTALL_PREFIX/bin/perl -v | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)
echo "$(date): Successfully updated to $NEW_VERSION" >> "$LOG_FILE"
echo "Perl successfully updated to $NEW_VERSION"
EOF
Put the updater on your PATH so you can run it as update-perl from any shell. The install -m 0755 command copies the file to /usr/local/bin and makes it executable in one step.
sudo install -m 0755 "$HOME/perl-build/update-perl.sh" /usr/local/bin/update-perl
Check that your shell can find the updater command before you use it:
command -v update-perl
/usr/local/bin/update-perl
Run the Perl Update Command on Ubuntu
Run the updater command whenever you want to check for a newer stable Perl release:
update-perl
When nothing new is available, the updater exits quickly:
Current version: v5.42.2 Latest version: v5.42.2 Perl is already up to date.
When a newer build is available, the final lines look like this:
Current version: v5.40.1 Latest version: v5.42.2 All tests successful. Perl successfully updated to v5.42.2
Run this updater manually instead of from cron. A source rebuild can stop on dependency issues, failed tests, or temporary network problems, and it is much easier to fix those when you are watching the output.
Test Perl on Ubuntu with a Hello World Script
A short script confirms the interpreter, shebang handling, and execute permissions all work the way you expect.
Write a Perl Hello World Script on Ubuntu
Create a small script directly from the shell:
printf '%s\n' '#!/usr/bin/env perl' 'use strict;' 'use warnings;' 'print "Hello, world!\\n";' > hello.pl
The shebang #!/usr/bin/env perl follows your current PATH, so it works with Ubuntu’s packaged Perl and with a source-built Perl under /usr/local/bin.
Make the Perl Script Executable on Ubuntu
Add execute permission to the script. The +x mode tells the shell that this file can be run as a program.
chmod +x hello.pl
Run the Perl Test Script on Ubuntu
Execute the script from the current directory:
./hello.pl
Hello, world!
Troubleshoot Perl on Ubuntu
These checks cover the Ubuntu-specific problems readers hit most often: missing modules, an unexpected Perl binary in PATH, and systems that only kept perl-base.
Fix Missing Perl Modules on Ubuntu
If a script reports that it cannot locate a module, start with the package name shown in the error and search Ubuntu’s repositories for the matching lib...-perl package.
Can't locate DateTime.pm in @INC (you may need to install the DateTime module)
apt-cache search '^libdatetime-perl$'
libdatetime-perl - module for manipulating dates, times and timestamps
Install the matching module package, then rerun your script:
sudo apt install libdatetime-perl
Fix an Unexpected Perl Version on Ubuntu
If perl -v shows a different version than you expected after using both methods, inspect every Perl binary your shell can see:
type -a perl
perl is /usr/local/bin/perl perl is /usr/bin/perl perl is /bin/perl
The first match is the one your shell runs by default. Use /usr/bin/perl script.pl when you want Ubuntu’s packaged runtime, use /usr/local/bin/perl script.pl when you want the source build, and keep #!/usr/bin/env perl in new scripts when you want them to follow your current PATH.
Verify the active interpreter again after choosing the path you want:
which perl
perl -v | head -2
/usr/local/bin/perl This is perl 5, version 42, subversion 2 (v5.42.2) built for x86_64-linux
Install the Full Perl Package Instead of perl-base on Ubuntu
If perl -v works but cpan or perldoc is missing, Ubuntu is probably running only the essential runtime:
dpkg -S /usr/bin/perl
perl-base: /usr/bin/perl
If that base interpreter is present but the full perl package is not, commands such as cpan and perldoc stay unavailable until you install the larger package.
Install the full package if you need the missing tools:
sudo apt install perl
Check that both commands are now available:
command -v cpan
command -v perldoc
/usr/bin/cpan /usr/bin/perldoc
Remove Perl from Ubuntu
APT-installed Perl and a source-built Perl clean up differently. On Ubuntu, removing the perl package does not remove the essential perl-base runtime, so /usr/bin/perl remains available for core system tools.
Remove the Perl Package from Ubuntu
Preview the removal transaction first. Ubuntu 26.04 uses the newer APT 3 summary format, while Ubuntu 24.04 and 22.04 still show the older The following packages will be REMOVED: wording.
sudo apt remove -s perl
Relevant output on Ubuntu 26.04 includes:
REMOVING: build-essential libhttp-negotiate-perl libgtk3-perl perl software-properties-gtk ubuntu-desktop-minimal Summary: Upgrading: 0, Installing: 0, Removing: 65, Not Upgrading: 14
Review the simulated removal list carefully before you continue. On development-heavy Ubuntu systems, removing the full
perlpackage may also remove packages that depend on it.
If the preview only lists packages you are prepared to remove, continue with the actual removal:
sudo apt remove perl
sudo apt autoremove
Refresh APT metadata before checking the installed state:
sudo apt update
Trim the verification output to the installed-state lines so the result is easy to read across Ubuntu 26.04, 24.04, and 22.04:
apt-cache policy perl | sed -n '1,2p'
perl: Installed: (none)
This removes the full perl package, but Ubuntu still keeps /usr/bin/perl through perl-base.
Remove the Source-Built Perl on Ubuntu
If you kept $HOME/perl-build/perl-install.log from the source install, reuse that manifest for a safer cleanup instead of hand-maintaining a long removal list.
Remove the update-perl helper too so the PATH command does not survive after the source-built runtime is gone.
This deletes the source-built files under
/usr/local. If you added CPAN modules to that same prefix, back up/usr/local/lib/perl5first.
The sed command removes the leading spaces from the install log, and xargs feeds each recorded path back to rm -f:
grep '^ /usr/local/' "$HOME/perl-build/perl-install.log" | sed 's/^ //' | sudo xargs -r rm -f
sudo rm -f /usr/local/bin/update-perl
sudo rm -rf /usr/local/lib/perl5 "$HOME/perl-build"
Confirm that Ubuntu’s packaged Perl is active again:
which perl
perl -v | head -2
/usr/bin/perl This is perl 5, version 40, subversion 1 (v5.40.1) built for x86_64-linux-gnu-thread-multi
Perl on Ubuntu FAQ
Ubuntu’s default APT sources currently provide Perl 5.40.1 on Ubuntu 26.04, 5.38.2 on Ubuntu 24.04, and 5.34.0 on Ubuntu 22.04. If you need newer upstream Perl, the source-build method installs Perl 5.42.2 under /usr/local.
Many Ubuntu systems already include perl-base because core tools depend on it. If perl -v works but cpan or perldoc is missing, install the full perl package with sudo apt install perl.
Use Ubuntu’s package for most systems because it receives security updates through APT and stays aligned with Ubuntu packages. Compile from source only when you need a newer upstream release or want it isolated under /usr/local.
Yes. Ubuntu packages many common modules as lib...-perl packages, which makes them easier to update and remove with APT. Use CPAN when the module is missing from Ubuntu or when you need a newer release than the repository provides.
No. The supported Ubuntu releases here are 26.04, 24.04, and 22.04 because Ubuntu 20.04 is outside standard support. If you still rely on 20.04, plan the move to a supported LTS before you chase Perl package differences.
Conclusion
Perl is ready on Ubuntu with either the distro package or a newer source build under /usr/local, so you can start running scripts, parsing logs, and adding modules right away. For project work around that runtime, install Git on Ubuntu to track your scripts. If those scripts need a local datastore, install SQLite on Ubuntu or install MariaDB on Ubuntu.
Formatting tips for your comment
You can use basic HTML to format your comment. Useful tags currently allowed in published comments:
<code>command</code>command<strong>bold</strong><em>italic</em><blockquote>quote</blockquote>