Perl/はじめに

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動
プログラミング > Perl > はじめに

TMTOWTDI[編集]

Perl(パール)とは、1987年ラリー・ウォールが開発したプログラミング言語です。PerlはC言語はもちろん、awksedのような様々なUNIXソフトウェアの伝統を受け継ぎ、多くの優れた機能を取り入れています。

PerlのモットーはThere's More Than One Way To Do It.(やり方は何通りもある)で、略してTMTOWTDI(ティムトゥディ)などと呼ばれます。これは「正しいやり方がいくつ存在してもよい」という考え方で、Perlの柔軟性を表しています。このことから、Perlは特にテキスト処理やCGIプログラミングの分野で多く用いられています。

PerlはC言語と比べて簡素であり、移植性が高い言語です。C言語では数百行で記述されるプログラムが、Perlでは数行で書けてしまうこともあります。

その一方で、省略を多用する文法や記号で表される特殊変数など、Perlのやり方に慣れるまでは少し時間がかかるかもしれません。一行でも多くコードを書き、Perlを身に付けましょう。

前提条件[編集]

テキストエディタを用いて例に挙げられる通りのファイルを作成できることを前提としています。プログラミングそのものの概念についてはプログラミング(Wikibooks)プログラミング(Wikipedia)を参照してください。以降、断りのない場合はLinux上でPerl 5.8以降のバージョンを利用しているものとして説明します(コマンド端末には bash を使用)。

実行環境[編集]

Microsoft Windows[編集]

Windows版は、Perl公式サイトでは提供していません。

このためWindowsユーザーの場合、サードパーティーが提供するPerl実行環境を使うことになります。

Windows 環境では ActivePerlをインストールして実行できます。 ただし2020年現在では、アカウント登録が必要です。

他のサードパーティーの提供しているWindows用Perlもあり、その一つがStrawberry Perl です。 Strawberry Perl は、Unix版PerlをMinGW(64-bit版では MSYS64)を使ってWindows対応させたものです。

インストール[編集]

上記サイトからインストールパッケージを選択し、ダウンロードします。

Strawberry Perl の場合、環境変数の設定は不要なので(インストール時に自動で設定)、インストール直後に使えます。


実行[編集]

Strawberry Perl の場合、Windows用のコマンド プロンプト・Power shellあるいは、Windows Terminalで使うことができます。

コマンドに、バージョン番号を表示する引数 -v を一緒に

perl -v

と入力してみて、

表示結果
C:\Users\ユーザー名>perl -v

This is perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread

Copyright 1987-2021, 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 http://www.perl.org/, the Perl Home Page.

C:\Users\ユーザー名>

のように表示されれば、インストールは成功していることが確認できます。

Mac OS X, GNU/Linux, FreeBSD, その他 UNIX 環境[編集]

GNU/Linux の場合、ディストリビューションによって Perl が初期インストールされているかいないかは異なります。 インストールされていないディストリビューションでは、apt などのパッケージマネージャーを利用してインストールする必要があります。 詳細は、利用しているディストリビューションのパッケージマネージャーの利用法を確認してください。 また、既に Perl がインストールされている環境でも、最新のバージョンを維持するためにパッケージマネージャーを利用押して update するよう心がけ、脆弱性があるまま使わないようにしましょう。

maxOS, FreeBSD, その他 UNIX 環境ではほとんどの場合、PerlはOSのユーザーランドとは別にパッケージとりて提供されています。「ターミナル」を起動し、コマンドプロンプト($, %, >などの記号)に続けてperl -vと入力し、[Enter](Return)キーを押し、以下のように表示されればperlが利用可能です。

% perl -v

This is perl 5, version 32, subversion 1 (v5.32.1) built for amd64-freebsd-thread-multi

Copyright 1987-2021, 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 http://www.perl.org/, the Perl Home Page.

%

PerlがインストールされていないUNIX環境[編集]

主要なOSならPerlをサポートしていると思いますが、もしOSの公式パッケージにperlが無い場合でも、 Perl Download - www.perl.orgからバイナリパッケージをダウンロードできます。

バイナリパッケージが存在しないプラットフォームの場合はPerl Download - www.perl.orgからソースコードをダウンロードし、ビルドして実行してください。

Mac OS 9[編集]

MacPerl が利用できます。

NOTE: Pretty much everything on this page hasn't been touched in 15 years, except for the bit about the book.

作成、実行の流れ[編集]

プログラムの作成[編集]

Perlはインタプリタ型の言語なので、ソースコードをそのまま実行できます。コンパイルの必要はありません(perlcc、PARなどを利用すれば可能)。

ソースコードの編集には好きなテキストエディタを使うことができます。 OS標準のメモ帳(Windows)、TextEdit(Mac OS X)、vi(*nix)などでも十分です。 Wordなどのワープロでも編集は可能ですが、標準では独自のバイナリファイルとして保存されるので注意してください。


なお、 python (別のプログラム言語のひとつ)のような対話モード(コマンド端末に直接コマンドを入力して実行するモード)はperlには無いです。(標準モジュールではない。追加の専用モジュールが必要になる。)


なのでPerlでは実行したい場合には毎回、テキストエディタなどに実行したいコードを書いてセーブ保存してから、そのファイルをコマンド端末から実行することになります(あるいはApacheやブラウザなどのweb環境で実行)。

プログラムの実行[編集]

テキストエディタでhello.plというファイルを下記のように作成し、

hello.pl
print "Hello, World\n";
print "Hello, Perl\n";
実行結果
Hello, World
Hello, Perl
print というのは、それを実行すると文字表示をしてくれる「組み込み関数」というものの一つ(ひとつ)。
Perlの文字列は、二重引用符( " 文字列 " )でくくる。一重引用符( ' 文字列 ' )だとPerlの場合、改行文字や変数などを使えないなどの不便がある。
実行の方法

コマンドプロンプト上で

perl hello.pl

のように入力すると、hello.pl を実行できます。

ほかの多くのプログラミング言語と同様に、Perlは構造化プログラミングというパラダイムを採用しています。プログラムの流れは逐次・分岐・反復の3通りしかありません。 つまり、原則としてプログラムはソースコードに記述された順に実行され、ifforなどの制御構造があったときだけ分岐・反復します。 ここではhello.plを作成して実行するまでを示しましたが、以後特に必要のない限りは単にプログラムの中身(コード)に続けて実行結果のみを表示するにとどめます。

Perlの基本機能の紹介[編集]

変数代入[編集]

変数とはプログラムの動く流れの中で値が入力されたり変化するデータです。Perlでは変数名(例ではx)の前に$, %, @などの接頭辞(sigil; シジル)がつく表現を変数として扱います。

コード例(エラーとなります)
#!/usr/bin/perl

use strict; 
use warnings;

$x = "Perl";
print "Hello, $x\n";
実行結果
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.
1行目は、シバン(shellbang!)で、スクリプトを実行するインタープリターの位置を教えます。
3行目は、選択的な警告を調整する Perl warnings です[1]
4行目は、安全ではない構文を制限する Perl プラグマ strict です[2]
strict を指示しているので、my を使って宣言しない変数(グローバル変数)の使用はエラーとなります。


コード例(修正後)
#!/usr/bin/perl

use strict; 
use warnings;

my $x = "Perl";
print "Hello, $x\n";
実行結果
Hello, Perl
6行目を修正した結果、正しく実行できました。
この様に、strict プラグマを使うことで、後々バグの原因になりがちな悪いコーディングスタイルを早い段階で是正できます。

Perlでは例にあるような構造のない、ただ一つの値のみを保有するデータ(スカラーと呼びます)以外に、順番に並んだ複数のデータからなる配列、「色(リンゴ)→赤」「色(みかん)→橙色」のように名前(鍵、ここではリンゴやミカン)と関連づけられた複数のデータからなるハッシュ、より複雑なデータ構造を実現するリファレンスなどのデータを扱うことができます。 変数についての詳細は変数、データ構造で学びます。 リファレンスについての詳細はリファレンスで学びます。

演算[編集]

Perlに数値の計算をさせることももちろんできます。

コード例
#!/usr/bin/perl

use strict; 
use warnings;

my $x = 5 * 120;
print "$x\n";
実行結果
600

演算についての詳細は演算子で学びます。

制御構造[編集]

原則としてPerlのプログラムは上に書かれているものから順に実行されていきますが、繰り返しや、特定の条件に応じて動作を切り替えることができます。


条件分岐[編集]

ある条件をみたしているか(ここでは$a が 3 より大きいかどうか)を判定し、判定の内容により動作を切り替えています。

コード例
#!/usr/bin/perl

use strict; 
use warnings;

my $a = 5;
if ($a > 3){
  print "$a > 3\n";
}
else {
  print "$a <= 3\n";
}
実行結果
5 > 3

反復[編集]

反復は、あるブロックを繰り返す制御構造でループとも呼ばれます。

コード例
#!/usr/bin/perl

use strict; 
use warnings;

foreach my $num (1 .. 10){
  print $num;
  print " ";
}
print "\n";
実行結果
1 2 3 4 5 6 7 8 9 10

コメント[編集]

プログラミングの作成中に「プログラム内にメモを残しておきたい」「一時的にある動作を実行されないようにしたい」といった要求が生じることがあります。このような「プログラミングのコードに記載されるが動作しない箇所」のことを一般にコメントと呼びます。

コード例
#!/usr/bin/perl

use strict; 
use warnings;

# シャープ以降から行末まで実行されない
print "ここはコメントの外\n";
実行結果
ここはコメントの外

Perlでは#以降の行端までがコメントとみなされます。C言語にあるような複数行にわたるコメントは原則的にサポートされていませんが、以下のような方法で実質的な複数行コメントを利用することができます。

Podによるコメント[編集]

コード例
#!/usr/bin/perl

use strict; 
use warnings;

=begin comment

   ここの中は複数行にわたるコメント
   プログラムの動作には影響を与えない。

=end comment

=cut

Podという本来はプログラムのドキュメントを記入する機能を利用して複数行コメントを書きます。=の前に空白等の別の文字が入った場合はコメントにならないので注意が必要です。

__END__によるコメント[編集]

コード例
#!/usr/bin/perl

use strict; 
use warnings;

__END__
ここにはどんなデータも置くことが出来ます

__END__は本来コメント用の構文ではなく、コードの終了を示す特殊リテラルです。 これ以降はプログラム内データとみなされ、プログラムとして実行されないので、どんな内容でも記述できます。

ちなみに、この内容はファイルハンドルDATAから読み込むことができます。


  1. ^ warnings - Perl pragma to control optional warnings - Perldoc Browser”. 2021年12月11日閲覧。
  2. ^ strict - Perl pragma to restrict unsafe constructs - Perldoc Browser”. 2021年12月11日閲覧。