Perlとは、プログラミング言語、及びその処理系である。書きやすく読みにくいことに定評がある。
概要
ラリー・ウォール(Larry Wall)により作成されたスクリプト言語Perl、及びその処理系(こちらはperlと書く)。
元々は真珠の英語表記pearlであったが、別の言語と名前がかぶっていることに気がついたため今の名前となっている。
正規表現を利用した文字列処理に優れており、簡単なコマンドライン制御ツール、テキスト処理、CGIプログラムにしばしば用いられてきた。
書きやすいため、Javascriptが存在すらしなかった1990年代前半以前は、Web上でインタラクティブなページを作るためのCGI用途では主流を占めていたが、読みづらさが災いしたのかRuby, Python, Javascriptなどの後続の言語にその地位を奪われてしまった。
いいところ
- 様々な記述方式があるため、慣れると快適に記述することができる
- CPANが利用できるのであれば他の人が作ったモジュールを再利用できる
- オブジェクト指向を柔軟に表現することができる
- 文字列に対する演算能力が高い。
- 優れた後方互換性。他言語と異なり、古い文法も廃止することなく残す主義なので、言語のバージョンアップに伴うコードの修正がほぼ不要で、システムの保守性が非常に高いが、記法が多すぎて読みにくい。
むつかしいところ
- CGIスクリプトを記述する際、shebangがWindows系OSとそれ以外とで異なるためソースコードをそのまま流用できない
- 定義済み変数が多すぎて、理解するまで他の人のソースコードが読めない
- 文字列演算処理の指定が細かいため、慣れるまでソースコードが読めない
- 略記法がしばしば使われるため、その存在を知らないとソースコードが読めない
- 詳細な動作原理を理解しないとCPANのソースコードが読めない
- Windows上でCPANの資産を利用できないケースがある
- OSに対して十分な権限がないとCPANを利用する手順が難しくなる
- モジュールのバージョンは頻繁に上がるため、(企業での利用に特に多い)バージョン指定を厳密に行う条件においての管理・運用が非常に手間である
- CPANのなにかのモジュールが利用不可となると、少しでもそのモジュールに依存している他のモジュールも連鎖的に利用不可となる
- perlbrewなどを利用してPerlの環境を整えておかないと、システムで利用されるPerlの処理に影響を与えたり、システム側でPerlの更新があったときに予期せぬ影響を受けたりする。
- my, local, ourとある変数スコープが理解しづらい
- JavaやC++, C#と比べると、言語設計によってオブジェクト指向をサポートしているわけではないので、既存のオブジェクト指向言語に比べて動作の理解が難しい
- リファレンスと、それを用いたスカラ、配列、ハッシュの理解が難しい
- 文字列の取り扱いに対してutf8フラグやエンコーディングをしっかり意識していないと容易に文字化けしたりプログラムが動作しなかったりする
- (日本語による)webによる独学の手段を見つけるまでが難しい(大体の場合、PerlはCGIとしてのPerlとして紹介され、その導入のためにwebサーバとPerlの動作環境をWindowsに入れ、設定を行うまでが非常に煩雑である)
処理系
perl
フリーソフトウェアで、アーティスティックライセンス/GPLにより配布されている。実際に開発されている唯一の処理系である。
CGI経由でのPerl
CGI経由で用いる場合はFastCGIやmod_perl(Apache)などを使用すると、プログラムがメモリにキャッシュされ、高速に処理出来るが、内容がキャッシュされることを前提に記述されたコードでないと正しく実行出来ないため、高速化を行うためにはそれを意識したプログラムの作りとしなければならない。
PSGI
webアプリケーションのためのPerl利用方法として、昔からの方法であった標準入力(+環境変数)標準出力とのやりとりではなく、Perlでの処理を前提とし、Perlのやりかたで入出力手段(インターフェイス)を定義したのがPSGI(Perl Web Server Gateway Interface Specification)である。これにより、PSGIのやりかたで記述されたPerlのwebアプリケーションはPSGIを提供するどのサーバーでも実行可能となる。
PSGIが提案される以前にも、Perlでwebアプリケーションを実装するための様々なやり方が存在したが、それは特定のフレームワーク・ミドルウェア・webサーバに依存する(つまり移植性に乏しい)ものであった。
CPAN
PerlはCPANというパッケージ管理システムを用いることによって機能を付加できる
同様の物に、RubyではRubyGems、Pythonではpip、PHPではPEARがある。
Hello, world
(Command Line)
>perl -e "print 'Hello, world'"
(Console Program, Linux)
#!/usr/bin/perl
binmode STDOUT, ":utf8";
use utf8;
use strict;
use feature qw(say);
say "Hello, world!";
(CGI,Linux)
#!/usr/bin/perl
binmode STDOUT, ":utf8";
use utf8;
use strict;
print "Content-type: text/html charset=utf8\n\n";
print "<html><head></head><body><p>Hello, world!</p></body></html>";
Perl6 と Perl7
かつて Perl 6と呼ばれていた言語は開発者こそ同じラリー・ウォールであるものの、大幅な変更が加えられたため互換性は無きに等しかった。Perl5とは別の言語として扱われるようになったPerl 6は、2019年10月に“Raku”という名称に変更され、Perlの姉妹言語として存続していくこととなった[1]。なお、Rakuは言語仕様名であり、その実装・処理系は“rakudo”という。かつてはPugsという別の実装も開発されていた。
2020年には、Perl 5.32を元にした“Perl 7”が発表されたが、後にこの計画は一旦取り下げになっている[2]。
関連動画
左: Perlで作っているらしいが…なんぞこれ
右: グニャラくん★の歌ってみたネタ…ニッチすぎるだろうJK
関連商品
関連コミュニティ
関連項目
外部リンク
脚注
子記事
兄弟記事
- なし
- 3
- 0pt