Perl（パール）とは、1987年にラリー・ウォールが開発したUNIXのソフトウェアの伝統を受け継ぎ、多くの優れた機能を取り入れています。
PerlのモットーはThere's More Than One Way To Do It.（やり方は何通りもある）で、略してTMTOWTDI（ティムトゥディ）などと呼ばれます。これは「正しいやり方がいくつ存在してもよい」という考え方で、Perlの柔軟性を表しています。このことから、Perlは特にテキスト処理やCGIプログラミングの分野で多く用いられています。
PerlはC言語と比べて簡潔であり、移植性が高い言語です。C言語では数百行のプログラムが必要な場合でも、Perlでは数行で書くことができることもあります。
一方で、Perlの文法は省略を多用したり、特殊変数を記号で表すことがありますので、Perlのやり方に慣れるまでには少し時間がかかるかもしれません。しかし、一行でも多くのコードを書いてPerlを身につけることをお勧めします。
テキストエディタを用いて例に挙げられる通りのファイルを作成できることを前提としています。プログラミングそのものの概念についてはプログラミング(Wikibooks)やプログラミング(Wikipedia)を参照してください。以降、断りのない場合はUnix（およびLinuxなどのUnix互換OS）上で
Perl 5.30.0（2019年05月22日 リリース）以降のバージョンを利用しているものとして説明します（かつて Perl6 と呼ばれていた Raku は含みません）。
Perl公式サイトではWindowsに対応したパッケージは提供していません。
このため、サードパーティーが提供するPerlのディストリビューションを利用するか、CygwinやWindows Subsystem for Linuxを利用する方法もあります。
ActivePerlは、ActiveState社（旧ソフォス社）が提供するWindows、Linux、macOS向けのPerlのディストリビューションです。
2024年1月現在、ActivePerlのPerlコアはv5.38.2（2023/11/29リリース）です。
Strawberry Perlは、Microsoft Windowsプラットフォーム用のプログラミング言語Perlのディストリビューションです。
Strawberry Perlには、完全に機能するMingw-w64 C/C++コンパイラなどのツールチェインが含まれています。
Strawberry Perlは、環境変数はインストール時に設定済みなので、インストール直後に、コマンド プロンプト・Power shellあるいは、Windows Terminalから使うことができます。
2024年1月現在、Strawberry PerlのPerlコアはv5.38.0（2023/07/02リリース）です。
maxOS, FreeBSD, その他 UNIX 環境ではほとんどの場合、PerlはOSのユーザーランドとは別にパッケージとして提供されています。「ターミナル」を起動し、コマンドプロンプト($, %, >などの記号)に続けてperl -vと入力し、⏎（[Enter]または[Return]）キーを押し、以下のように表示されればperlが利用可能です。
% perl -v
This is perl 5, version 38, subversion 2 (v5.38.2) built for amd64-freebsd-thread-multi
Copyright 1987-2023, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at https://www.perl.org/, the Perl Home Page.
% _
主要なUNIXならは、Perlをサポートしていると思いますが、もしOSの公式パッケージにperlが無い場合でも、
[https://www.perl.org/get.html Perl Download - www.perl.org]からバイナリパッケージをダウンロードできます。
バイナリパッケージが存在しないプラットフォームの場合は[https://www.perl.org/get.html Perl Download - www.perl.org]からソースコードをダウンロードし、ビルドして実行してください。
GNU/Linux の場合、Linux Standard Base(LSB; ISO/IEC 23360:2021)では、準拠するすべてのディストリビューションにPerlをインストールして出荷することが義務付けられています/usr/bin/perl にPerlインタープリターも実行形式または実行形式へのリンクが有り ⇒ [https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Languages/LSB-Languages/perllocation.html Linux Standard Base Languages Specification 5.0::7.2. Perl Interpreter Location]、v5.8.8 以降であることが義務付けられています ⇒[https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Languages/LSB-Languages/perlversion.html Linux Standard Base Languages Specification 5.0::7.3. Perl Interpreter Version]。。
しかし、何らかの理由でインストールされていないディストリビューションでは、apt などのパッケージマネージャーを利用してインストールする必要があります。
詳細は、利用しているディストリビューションのパッケージマネージャーの利用法を確認してください。
また、既に Perl がインストールされている環境でも、最新のバージョンを維持するためにパッケージマネージャーを利用して update するよう心がけ、脆弱性があるまま使わないようにしましょう。
Perlはインタプリター言語です。つまり、プログラムを実行するたびに、コンパイルPerlでコンパイルといった場合、Perlインタープリターがソースコードを読込み内部表現に置換えることです。これは移植性・相互運用性の視点からは好ましい特徴で、C/C++やJavaのように実行形式や中間表現をファイルに書出すことではありません。と実行を行うPerlインタプリターが常に必要なのです。
C/C++やJavaのようにプログラムをコンパイルしてから実行するのではなく、プログラムのソースコードを（Perlインタプリターがある）別のコンピューターにコピーして実行するだけで良いのです。
ソースコードの編集には好きなテキストエディタを使うことができます。
OS標準のメモ帳(Windows)、TextEdit(macOS)、vi(UnixやUnix互換OS)などでも十分です。
Wordなどのワードプロセッサーでも編集は可能ですが、標準ではプレーンテキストとして保存されないので注意してください。
Perlで書かれたコードを実行したい場合には、テキストエディタで実行したいコードを書いてセーブ保存してから、コマンド端末から保存したファイルを perl で実行することになります。
Perlにも、Pythonの対話モードのような REPL( ''Read-Eval-Print Loop'' ) があります。
デバッガーの起動例:
% perl -de 1
Loading DB routines from perl5db.pl version 1.77
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(-e:1):   1
  DB<1> say 2**9
512
  DB<2> say "Hello world!"
Hello world!
  DB<3> q
% _
短いコードの確認には、このデバッグモードが便利です。
テキストエディタでhello.plというソースファイルを下記のように作成し、
[https://paiza.io/projects/rUWKfipgtECXJeJe1lIlSg?language=python3 hello.pl]:
use v5.30.0;
say "Hello, World";
say "Hello, Perl";
コマンドラインでの実行:
% cat > hello.pl
use v5.30.0;
say "Hello, World";
say "Hello, Perl";
^D
% perl hello.pl 
Hello, World
Hello, Perl
% chmod +x hello.pl 
% ./hello.pl 
Hello, World
Hello, Perl
% _
say は、文字列または文字列のリストを表示（して改行）する組込み関数です。
Perlの文字列リテラルは、"(ダブルクォーテーションマーク)で囲みます。
’(シングルクオーテーション)で囲んで文字列リテラルを表現できますが、この場合は改行文字(\n)などのバックスラッシュエスケープや変数($x, @yや%z,)が展開されずそのまま表示されるなどの違いがあります。
Perlは、多くのプログラミング言語と同様に、Perlは構造化プログラミングというプログラミングパラダイムを採用しています。
プログラムの流れは逐次・分岐・反復の３つが基本ですgotoはあります。が、大域脱出などはラベルと併用したループ制御文で実現できるなど、gotoが必要になるケースは極めて少ないです。
つまり、原則としてプログラムはソースコードに記述された順に実行され、if や for などの制御構造があったときだけ分岐・反復します。
Perlでは、変数は「データを格納する領域（オブジェクト）に付けられた名前」です（動的型付け）。 Perlでは変数名(例ではx)の前に$, %, @などの接頭辞（sigil; シジル）がつく表現を変数として扱います。
[https://paiza.io/projects/FL1UJywrp6TZ7K6-soeWzA?language=perl コード例（エラーとなります）]:
use v5.12;
use warnings;
$x = "Perl";
say "Hello, $x";
実行結果:
Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at Main.pl line 6.
Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at Main.pl line 7.
Execution of Main.pl aborted due to compilation errors.
シバン(shebang!)で、スクリプトを実行するインタープリターの位置を教えます。
#!/usr/bin/perlとする例を見かけますが、perl が /usr/bin/perl でなく他の場所（例えば /usr/local/bin/perl）にインストールされている可能性があるので#!/usr/bin/env perlとしました。これは、PATHが通ったディレクトリに perl と言う名前のトロージャンホースを仕掛けられるリスクがあるとの批判がありますが、$ perl hello.plするときにも同じリスクがあり、リスクゼロではありませんが受入れがたいものではないと考えられます。
Perl v5.12 以降の機能を有効にしています。
|url=https://perldoc.perl.org/strict
|title=strict - Perl pragma to restrict unsafe constructs - Perldoc Browser
|date=
|accessdate=2022/11/09
。
strict が有効なので、グローバル変数の使用はエラーとなります。
無効にするのは、 no strict; とします。
|url=https://perldoc.perl.org/warnings
|title=warnings - Perl pragma to control optional warnings - Perldoc Browser
|date=
|accessdate=2021/12/11
。
これは、Perl5.36.0 以降でディフォルトで有効なので 5.36 より前のスクリプトでは、明示的に use warnings; が必要です。
この対策として、キーワード my を使ってレキシカルスコープの変数（レキシカル変数）として宣言します。
[https://paiza.io/projects/z8rb2o2Ko36-XbXsQ9lpvg?language=perl コード例（修正後）]:
use v5.12;
use warnings;
my $x = "Perl";
say "Hello, $x";
実行結果:
Hello, Perl
6行目を修正した結果、正しく実行できました。
この様にに、use v5.12;以降を指定することで、 安全でないコードを早い段階で発見できます。
Perlでは例にあるような構造のない、ただ一つの値のみを保有するデータ（スカラーと呼びます）のほか、順番に並んだ複数のデータからなる配列、キーと値のペアー複数記録するハッシュ、より複雑なデータ構造を実現するリファレンスなどのデータを扱うことができます。
''変数についての詳細は変数とデーター型で解説します。''
''リファレンスについての詳細はリファレンスで解説します。''
Perlには、豊富な数値計算のための演算子が用意されており、それらを組み合わせて式を作ることが出来ます。
[https://paiza.io/projects/nbzjaZZ3jpAbPwNCiUerYA?language=perl コード例]:
use v5.12;
use warnings;
say 12 + 5;
say 12 - 5;
say 12 * 5;
say 12 / 5;
say 12 % 5;
say 12 ** 5;
say 12 & 5;
say 12 | 5;
say 12 ^ 5;
say 12 << 1;
say 12 >> 1;
say -12;
say +12;
実行結果:
17
7
60
2.4
2
248832
4
13
9
24
6
-12
12
{{コラム|use v5.12;とuse warnings;|2=プラグマ use v5.12;とuse warnings;は必ずプログラム冒頭で指定しましょう。
use v5.12;のv5.12は、自分の使っているPERLインタープリターのバージョン（特殊変数 $^V で確認できます）で良いでしょう。
もし、指定しないと組込み関数のスペルミス程度でも、エラーも警告もなく思いもかけない結果になります。
[https://paiza.io/projects/YXKLDVsafNKdeLivSicKsQ?language=perl 修正例]:
$x = cyop;
print $x
実行結果:
cyop
[https://paiza.io/projects/YXKLDVsafNKdeLivSicKsQ?language=perl コード例]:
use v5.12;
use warnings;
$x = cyop;
print $x
実行時エラー:
Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at Main.pl line 4.
Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at Main.pl line 5.
Bareword "cyop" not allowed while "strict subs" in use at Main.pl line 4. 
Execution of Main.pl aborted due to compilation errors.
原則としてPerlのプログラムは上に書かれているものから順に実行されていきますが、繰り返しや、特定の条件に応じて動作を切り替えることができます。
ある条件をみたしているか(ここでは$x が 3 より大きいかどうか)を判定し、判定の内容により動作を切り替えています。
[https://paiza.io/projects/R3qff1jSAWSPoXUkHHLpiQ?language=perl コード例]:
use v5.12;
use warnings;
my $x = 5;
if ($x > 3){
  say "$x > 3"
} else {
  say "$x <= 3"
}
実行結果:
5 > 3
反復は、あるブロックを繰り返す制御構造でループとも呼ばれます。
[https://paiza.io/projects/XXmfN6Ueil78HAvDabN0CQ?language=perl コード例]:
use v5.12;
use warnings;
foreach my $num (1 .. 10) {
  print "$num ";
}
say ""
実行結果:
1 2 3 4 5 6 7 8 9 10 
プログラミングの作成中に「プログラム内にメモを残しておきたい」「一時的にある動作を実行されないようにしたい」といった要求が生じることがあります。このような「プログラミングのコードに記載されるが動作しない箇所」のことを一般にコメントと呼びます。
[https://paiza.io/projects/BkhWkvSnPy4mvEW-CzjGDQ?language=perl コード例]:
use v5.12;
use warnings;
say "ここはコメントの外";
実行結果:
ここはコメントの外
Perlでは#以降の行端までがコメントとみなされます。C言語にあるような複数行にわたるコメントはありませんが、以下のような方法で実質的な複数行コメントを利用することができます。
PerlのPodは、Plain Old Documentationの略で、Perlスクリプトのドキュメンテーションを書くためのフォーマットです。
Podは、テキストファイルに記述され、スクリプトと一緒に配布されることが一般的です。
Podは、人間が読みやすいドキュメントを作成するために設計されていますが、コンピュータプログラムにも解析可能な単純な構文があります。
以下はPerlで1から100の間の素数をすべて表示するプログラムにPodによるドキュメントも付加した例です。
use v5.12;
use warnings;
=head1 NAME
find_primes.pl - Find all prime numbers between 1 and 100
=head1 SYNOPSIS
  perl find_primes.pl
=head1 DESCRIPTION
This program finds all prime numbers between 1 and 100 and prints them to the console.
=head1 AUTHOR
Your Name
=cut
my @primes = ();
for my $num (1..100) {
    my $is_prime = 1;
    
    # Check if the number is divisible by any number other than itself and 1
    for my $divisor (2..int($num/2)) {
        if ($num % $divisor == 0) {
            $is_prime = 0;
            last;
        }
    }
    
    # If the number is prime, add it to the array
    push @primes, $num if $is_prime;
}
print "Prime numbers between 1 and 100:\n";
print join(", ", @primes) . "\n";
HTMLのレンダリング例:
find_primes.pl - Find all prime numbers between 1 and 100
NAME
SYNOPSIS
DESCRIPTION
AUTHOR
NAME
find_primes.pl - Find all prime numbers between 1 and 100
SYNOPSIS
perl find_primes.pl
DESCRIPTION
      This program finds all prime numbers between 1 and 100 and prints them to
      the console.
    
AUTHOR
Your Name
上記の例では、=head1はセクションの見出しを表します。
NAMEとSYNOPSISは、モジュールの名前と使用例を説明します。
DESCRIPTIONは、モジュールの機能の詳細な説明であり、AUTHORは、モジュールの作者の情報を提供します。