Perl入門 ≫ 基礎知識
基礎知識も必要
Perlを学習するためのとりあえずの基礎知識です。
右端の単語をクリックするとそれぞれ詳細説明が出ます。
注)当サイトの他の講座と多少内容が重複しています。

必要ない人は次へGo!
Perlって?
Perlはプログラム言語の一種です。
そもそもプログラムって何よ?って人のために・・・
コンピュータは色々な仕事をしてくれます。
が、勝手にやってくれちゃうわけではなくて、人間が命令した通りの動きを正確に実行してくれるのです。かと言って、命令すればなんでもできるわけではありません。
決められた通りの事しかできません。
この決められた通りの事をやらせるために、これまた決められた命令方法で指示を出してコンピュータに作業してもらうわけです。
この命令指示の一連がプログラムということになります。
この時の命令の書き方ってのが色々ありまして、それがプログラム言語です。
Perlはその一種で、わりととっつきやすい言語だと思います。
例えば、「あるファイルを読んで、少しだけ中身を変換して出力したい」
場合、各プログラム言語でこの作業を実行するプログラムを書いて、実行させればいいのです。
さてさて、このperl言語で書いたプログラムの中身(ソースコード)
をperlスクリプトといいます。
で、このperlスクリプトは単体ではただのファイル・文字の羅列です。
これを思う通りに動かすためには、perlというソフトウェアを実行します。
perlスクリプトはperlによって実行されます。

Perlはこのコードを前から一行一行実行します。こういう風に実行される言語をインタープリタ型言語といいます。
#!/usr/local/bin/perl
print "hello"; 実行順1
print "perl"; 実行順2
1;
このプログラムの場合、最初に「print "hello";」が実行されて、次に「print "perl";」が実行されます。
Perlは
perl [オプション] スクリプトファイル名 引数
で実行します。

Perlは様々なオプションを付けて実行することができます。
複数のオプションを付ける時、
perl -w -c test.pl
と指定します。また、オプションをまとめて
perl -wc test.pl
と指定することもできます。


-0 | レコードセパレータの指定 |
---|---|
-a | オートスプリットモード |
-c | 文法チェック |
-d | デバッグモード |
-D | デバッグフラグをセットする |
-e | コマンドラインからスクリプトを入力 |
-i | 入力ファイルを修正し、バックアップファイルを作成する |
-I | C プリプロセッサにインクルードファイルの位置を知らせる |
-l | 行末処理を自動的に行なう |
-n | sed -n や awk のエミュレート |
-p | sed のエミュレート |
-P | コンパイル前に C プリプロセッサを通す |
-s | コマンドラインオプションの解析結果を変数にセットする |
-S | スクリプトを環境変数 PATH を用いて探す |
-u | スクリプトのコンパイル後、コアダンプする |
-U | 安全でない操作を可能にする |
-v | perl のバージョンとパッチレベルを表示する |
-w | 識別子に関するさまざまな警告を出す |
-x | スクリプトがメッセージ内に埋め込まれていることを知らせる |
一応これだけ存在しますが、システムによっては有効にならないものもあります。
とりあえずよく使うのは、-v,-w,-cぐらいなので、これだけ覚えておけばいいでしょう。
プログラムを動かす準備
perlのプログラムを動かす一番単純な方法は、コマンドプロンプトから実行することです。
ここではコマンドプロンプトと、その操作方法を学習しておきましょう。
そもそもコマンドプロンプトとは何か?
いまどきのPCの操作はマウスとキーボードを使って行う事ができます。
何かソフトを使いたいなら、そのアイコンをダブルクリックすれば起動できます。
PCの操作は、このように視覚的にウィンドウシステムを使って操作するほかに、コマンドプロンプトでコマンドと呼ばれる命令文を使って操作することもできます。
コマンドプロンプトとは、PCへの操作を文字入力だけで行うための画面です。
まず、[スタート]->[すべてのプログラム]->[コマンドプロンプト] を開いてみて下さい。Windowsのバージョンによっては[スタート]->[コマンドプロンプト]になります。なければ探してください。

こんなん出ましたか?
Windowsのバージョンによっては少し違うと思います。
さて、この
C:\Users\usr\>
の次に白いカーソルが点滅しています。ここにコマンド(命令)を打ってエンターキーを押します。
そうすることにより、プログラムを実行したりディレクトリを移動したりすることができます。
この”C:\Users\usr\>”というようにカーソルの前に表示されている部分をプロンプトといいます。
この部分は環境によって最初に表示されるものに違いがあります。が、大体はこの値かと。最後のusrとは、PCにログインしたユーザ名になっているはずです。

コマンドプロンプトで見ると、ディレクトリの区切りは「¥」の半角文字です。
ですがHTMLで「¥」の半角文字を見ると「\」になってしまうので、このサイトでの説明もすべて「\」になります。おなじものだと思ってください。
が!
ホームページ作成の「基礎知識も必要」の「ファイルとディレクトリ・パス」でも説明したように、ディレクトリの区切りは本来「/」です。
色々歴史的な問題があったゆえの結果なんですが、とりあえずPC上での区切りは「¥」の半角文字、UNIXなどサーバ上での区切りは「/」を使う事が多いです。
が、実際同じ扱いになるようなので、PerlをCGIで使うときの1行目も
#!/usr/local/bin/perl
と書いてもPC上でもサーバ上でも使えます。
普通は、このプロンプトはカレントディレクトリを表示してくれています。
カレントディレクトリについてはホームページ作成の「基礎知識も必要」の「ファイルとディレクトリ・パス」を参考にしてください。
すると、今この状態だと『ドライブCの下のUsersディレクトリの下のusrディレクトリ)』にいることになります。
移動してみましょう。
まず、
C:\Users\usr> dir
と入力してリターンを押しましょう。なにかずらずら出てきたでしょう。
C:\Users\usr> dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は XXXX-XXXX です
C:\Users\usr のディレクトリ
2018/01/16 15:39 <DIR> .
2018/01/16 15:39 <DIR> ..
2013/09/03 22:44 <DIR> local
2017/03/14 17:36 166 text.txt
これが”C:\Users\usr”のディレクトリの情報です。当然人によって違います。
前から、ファイル(ディレクトリ)作成日・時間・ファイルの大きさ(ディレクトリの場合は”<DIR>”と表示)・ファイル(ディレクトリ名)が一つずつ表示されます。
移動できるのはディレクトリなので、下に移動できるディレクトリがあれば、そこに移動してみましょう。
C:\Users\usr> cd local
または
C:\Users\usr> cd .\local
などとやると、カレントディレクトリが変化するので、今度はプロンプトが
C:\Users\usr\local>
となります。
”.”は自分のディレクトリを表します。
一つ上に戻ってみましょう。
C:\Users\usr\local> cd ..
C:\Users\usr>
”..”は一つ上のディレクトリを表します。
相対パス移動
今までやったのは相対パス移動です。
もちろん
C:\Users\usr> cd local\test
という様に複数のディレクトリを一気に移動したりできます。
また、先ほどやったdirコマンドも、
C:\Users\usr> dir local
等というように相対パスで指定したディレクトリの情報を出すことができます。
dirコマンドだけですと、カレントディレクトリの一覧が表示されます。
絶対パス移動
さて、絶対パスとは、”\”で始まるパス形式です。よって、
C:\Users\usr> cd /
や
C:\Users\usr> dir /windows
とやればいいわけです。
ですが、
パソコンには大抵の場合、ドライブというものが存在しています。
”C”とか”D”とか・・・少なくとも今時のマシンではほぼ複数のドライブが存在します。
コマンドプロンプト上でドライブを移動するには、
C:\Users\usr> D:\tmp
等と指定してもできません。
このドライブごとにルート”\”が存在していることになるので、一度ドライブを移動しなければなりません。
C:\Users\usr> D:
とやります。移動するドライブ名のあとに続いて”:”を打ってリターンします。
すると、
D:\>
この様に移動できます。あとは絶対パスだろうが相対パスだろうが自由にこのドライブ内を移動してください。
しかし、ディレクトリ情報を表示するdirコマンドは別にドライブを移動する必要はありません。
D:\> dir C:\windows
とやればできます。ただし、ドライブ名に続いて絶対パスで指定する必要があります。
コマンドは大体次の3っつを知っていれば十分です。
● dir ディレクトリの情報を表示
● cd ディレクトリ移動
● C: ”ドライブ名:”でドライブ移動
他のコマンドに関しては、必要になったら調べて使ってください。
どうやって実行するの?
[スタート]->[コントロールパネル]->[システムとメンテナンス]->[システム]
の[システムの詳細設定]から[詳細設定]タブを選択した画面の右下にある「環境変数」をクリックします。
で、下の一覧の中に「Path」という変数がないでしょうか?ここを選択して[編集]を押すと、設定画面が出てきます。
PathとPATHは同じです。
[ユーザの環境変数]のほうもPathがありますが、「システム環境変数;ユーザ環境変数」という形になるので、先に設定したシステム環境変数の値の方が優先になります。
一応ユーザ環境変数のほうにしておくのが無難でしょうが、自分は面倒なのでシステム環境変数で。どちらもかまいません。

色んなディレクトリが”;”で繋がれて出てきませんか?
この複数の各ディレクトリのすぐ下にあるプログラムは、コンピュータ内のどこのディレクトリにいても実行できるのです。
これはコマンドプロンプトからも確認できます。
C:\Users\usr> echo %PATH%
とやると、色々な値が出てます。
これは上のPATHの一覧と同じはずです
※PATHについてはCGI講座の基礎知識「実行パス」で説明してあります。
例えば、Windowsに標準でついているテキストエディタのメモ帳ですが、プログラム名はnotepad.exeです。
これは、通常C:\Windowsの下にあります。エクスプローラーで探してみましょう。
エスプローラーからファイル名をダブルクリックするとメモ帳が立ち上がりますが、コマンドプロンプトから
C:\Users\usr> notepad
とやっても起動します。
これは、環境変数PATHにnotepad.exeのあるディレクトリC:\Windowsが追加されているから、カレントディレクトリがどこであっても、システムが環境変数のパスの中からnotepad.exeがあるディレクトリを順に探っていき、C:\Windows下にあったので、それを実行したのです。
Perlのインストールが無事に終了していれば、ここにはPerlのパスも含まれます。
もしPerlをC:\perlにインストールしていたら、
C:\perl\bin\perl.exe
が出来ているはずです。これがperl本体です。
Perlのパスとは、C:\perl\bin\perl.exeになります。
perl.exeがあるディレクトリ「C:\perl\bin」を環境変数PATHに追加することで、Perlへのパスが通っている、という言い方をすることもあります。
前にperlスクリプトはperlによって実行されると説明しましたが、
実際にはコマンドプロンプトから
C:\> C:\perl\bin\perl test.pl
または
C:\> perl test.pl
(”test.pl”はperlスクリプトの書かれたファイル名です)
ってな風に実行します。
上の方法は絶対パスで指定した方法です。
下はPATHを利用した方法です。通常、こちらの方法を使います。
もし、PATHの中にPerlのパスがない場合、他のディレクトリからだと
C:\> perl
'perl' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
等と怒られます。
こちらのほうが一般的なので、もしもPATHが上手く通っていない場合は、環境変数PATHの値を確認して、使えるようにしておいてください。
実際にプログラムを動かしてみましょ
試しに自分で作ったPerlプログラムを実行してみましょう。
まず、テキストエディタで新規ファイルを作ります。
テキストディタは、Windowsに標準でついているメモ帳などのエディタソフトです。
フリーで使いやすいものがたくさんあるので、自分で使いやすいものを用意しておきましょう。個人的おすすめはTeraPadです。
よく使うようならショートカットを作成してデスクトップ上に置いておくのもいいでしょう。
では、Perlスクリプトを書きましょう
まず一行目はスクリプトの実行パスを書かなくてはなりません。
PerlをC:\perlにインストールしていれば、通常C:\perl\bin\perlになるはずです。
#!C:\perl\bin\perl -w
”#!”に続いてパスと半角スペースを空けて”-w”を書いて改行しましょう。
今のところおまじないみたいなもんだと思ってください。
これは途中で改行しないで一行で書いてください。
コマンドプロンプトから実行する場合、別にこの行はなくてもいいんですが、書いておくと便利な場合があるので素直に書いておいてください。
中身を書く
いきなり中身を書くのはなんなので、とりあえず一行目のパスの後に一行あけましょう。
#!C:\perl\bin\perl -w
この後、続いてperlで実行するスクリプトを書きます。
ですが、その前にできれば、
#!C:\perl\bin\perl -w
use strict;
という行を入れてください。正確なスクリプトが書けます。
今の所何か実行するべき知識はありませんので、とりあえず何か出力してみましょう。
#!C:\perl\bin\perl -w
use strict;
print "Hello!";
1;
または
#!C:\perl\bin\perl -w
use strict;
print <<"EOM";
Hello!
EOM
1;
と書いて下さい。どちらでもやることは同じです。単に文字列を出力してるだけです。
(注意:”EOM”だけ書いてある行は、”EOM”の前後に空白等入れないで下さい。)
保存
名前を付けて保存しましょう。test.plとでもしておきましょうか。
このとき、拡張子なしで保存すると拡張子がtest.txtとなってしまうので、きちんと拡張子まで指定しましょう。もし間違えてしまったらエクスプローラーから名前を変更します。
今回は”D:\temp”ディレクトリに保存しておくことにしましょう。みなさんはお好きなディレクトリに。
ディレクトリがない場合は新規に作ってください。
このとき、保存するディレクトリを覚えておいてください。
コマンドプロンプト
コマンドプロンプトを立ちあげて、”D:\temp”ディレクトリまで移動してください。
C:\Users\usr> D:
D:\> cd temp
D:\temp> dir
で先ほど保存したtest.plは一覧の中にあるか確認しましょう。
文法チェック
実行の前に文法チェックしましょう。
perlの実行オプションとして、文法チェックの-cと、警告(Warning)を表示する-wを付けて実行します。

警告とは、エラーほどじゃないけど、ここはちょっと直したほうがいい、という内容です。
エラーの場合はプログラム自体動きませんが、警告の場合大抵うごきます。
そして警告の内容は、perlの場合表示しないのが通常です。これは設定によります。
ですが、キレイなプログラムを書くためには、なるべく警告も気にするようにしましょう。そのためにあえて-wオプションを付けて表示させるようにします。
D:\temp> perl -wc test.pl
test.pl syntax OK
となればおっけー。
これは、「このディレクトリにあるtest.plの文法チェックをするためにperl.exeで実行しろ!」というコマンドになります。
何か間違いがあると、注意されます。
たとえばprintをprintt等としてみましょう。
D:\temp> perl -wc test.pl
syntax error at test.pl line 6, near "Hello!"
Bareword "printt" not allowed while "strict subs" in use at test.pl line 5.
test.pl had compilation errors.
怒られました。「printtって何なのよ!?」と言われています。
テキストエディタによっては、こういったプログラム言語で特別に使われる単語は色がついていたり太字になっています。

printは太字ですが、これをprinttにすると太字ではなくなります。文法上の間違いはこの機能も利用するといいでしょう。
ただし!ファイル名が確定して拡張子がplかcgi、つまりこのファイルはPerlで書かれてますよーってことが分かるまでやってくれません。ファイルを新規で作ったらまず一度保存して名前をつけてしまうといいです。
実行
文法チェックが終わったら実行しましょう。
D:\temp> perl -w test.pl
Hello!
となったでしょうか?
これは、文字列「Hello!」を表示するプログラムなので、うまくいったことがわかります。
ファイルの指定
さて、perlスクリプトは
で実行します。
それぞれの項目の間は半角スペース一個以上あけてください。
このスクリプトファイルは絶対パス指定だろうと相対パス指定だろうと、ドライブを超えて指定しようとも全て実行できます。
C:\> perl -w D:\temp\test.pl
Hello!
実際は、スクリプトファイルのあるディレクトリまで移動して、そこから実行するのが楽です。
CGIとPerlの関係は?
先にCGI講座のCGIについてを見た人なら、すでにCGIとPerlの関係を理解していると思いますが、ここでおさらいです。先に↑を見ておいてください。
CGIなんて使わないぜ!ってなひとは読み飛ばしてください。
実際のところCGIで使いたいためにPerlを学習する人が多いと思います。
Perl自体はプログラミング言語の1つで、perl言語で書いたプログラムをperlのインタープリタで実行することで、プログラムが動いて、コンピュータに何か処理をさせることができます。
この仕組みをWebサーバ上に置くことで、ブラウザからのアクションによって、サーバでプログラムを実行して、何か処理をさせ、結果をブラウザに返すことができます。これがCGIです。
CGIは、Perlを利用した仕組みといえます。(CGIは他のプログラム言語を使うこともできます)

例えば、perlで普通に文字列をちょっと出力したいだけなら
#!C:\perl\bin\perl -w
use strict;
print "Hello!";
1;
これでいけます。出力先は、この場合実行したコマンドプロンプト画面です。
これをCGIとして、ブラウザに表示させたい場合は
#!C:\perl\bin\perl -w
use strict;
print "Content-type: text/html\n\n";
print "Hello!";
1;
と、ヘッダー表示する処理を入れないといけません。一行目のperlの実行パスも、実行環境に合わせて変更する必要があります。拡張子も違う場合があります。サーバ上なら、ファイルの権限も設定が必要です。
これだけでも結構違います。
さらに、通常CGIのプログラムはこんな単純なものではありません。
Perlの文法も細かく覚えないとかけないので、そのためにperlを学習します。
学習しているときは、学習項目ごとに作ったプログラムを、コマンドプロンプトを通して実行しましょう。
ある程度言語に慣れたら、CGIに使えるようなプログラムを書いていきます。
CGIの場合は、CGIとしてのプログラムを書いて、まずは文法チェックし、そこからブラウザで試すことを心がけてください。