ブログトップ 記事一覧 ログイン 無料ブログ開設

サンプルコードによるPerl入門

3000-01-01

サンプルコードによるPerl入門 - 目次

 サンプルコードによるPerl入門は、サンプルコードを中心としたPerlの入門サイトです。またPerl中級者、上級者向けの内容も豊富に扱っていますので、順番に学習していくと、実際の仕事に必要な知識も身につくようになっています。

 Perlを使ったWebサイトの作り方、関数やモジュールなPerlの便利な機能の解説も行っています。

Perl基礎

 Perlの基礎について解説します。Perlのインストール、基本的な構文、配列、ハッシュ、正規表現、ファイル入出力、オブジェクト指向などを学ぶことができます。

  1. コマンドプロンプト- コマンドプロンプトの使い方
  2. Perlとは - Perlの特徴について
  3. Perlインストール - Perlのインストール方法
  4. Perl基礎文法最速マスター - Perlの基礎をすばやく学習
  5. 現代的なPerlの記述方法 - Perlの現代的な書き方
  6. 実践で役立つPerl正規表現 - Perlの正規表現で頻繁に利用するテクニック
  7. 配列とハッシュを自由に扱う - ハッシュと配列の扱い
  8. サブルーチンの作成 - サブルーチンの作成方法
  9. Perlのスコープを理解する - スコープという概念を学習
  10. ファイル入出力の基礎 - ファイルの読み書き
  11. Perlオブジェクト指向入門 - オブジェクト指向の入門
  12. デバッガの手引き - デバッガの紹介
  13. Perl豆知識 - 知っておくと便利な豆知識
  14. Perl FAQ - Perlでよくある質問に答える

Mojolicious入門

 Perlを学ぶ楽しい方法のひとつはWebサイトを作成してみることです。MojoliciousはPerlでWebサイトを作る場合の代表的なフレームワークです。Mojoliciousを使えば、簡単にWebサイトを作成することができます。

Mojolicious入門 - PerlでWebサイトを作ろう

Mojoliciousリファレンス

 Mojolicious入門で紹介できなかったさまざまなテクニックを紹介します。

Mojoliciousリファレンス - Mojoliciousのリファレンス

Perl書籍

 Perl関連の書籍の紹介です。「サンプルコードによるPerl入門基礎編」「簡単プログラミング Perl/CGI」と「もっと自在にサーバを使い倒す 業務に役立つPerl」は僕が書いています。

Perl書籍 - Perl関連の書籍情報

よく使用する関数一覧

 よく使用する関数の一覧です。これを見れば、実用で利用するPerlの標準関数をひととおり覚えることができます。

よく使用する関数一覧 - よく使用する関数の紹介

Perlモジュール徹底解説

 モジュールはPerlに機能を追加する仕組みです。Perlの標準モジュールを中心にして、利用頻度の高いモジュールについて、詳しく解説しています。

Perlモジュール徹底解説 - モジュールについての詳しい解説

Perl逆引き辞典

 Perlの逆引き辞典です。やりたいことをさがせます。簡単なサンプルつきです。

Perl逆引き辞典 - Perlの逆引き辞典

コーディングルール

 サンプルコードによるPerl入門でPerlのソースコードを書くときに利用しているコーディングルールです。参考にしてください。

サンプルコードによるPerl入門のコーディングルール

データベース基礎

 簡易なデータベースシステムであるSQLiteとPerlのデータベースにアクセスするためのモジュールDBIを使って、データベースについて学びます。

SQLiteで学ぶデータベース操作の基礎

XSによるC/C++バインディング入門

 XSはC/C++の関数をPerlの関数にマッピングする仕組みです。C/C++で書かれた関数をPerlから呼び出す方法について解説します。

XSによるC/C++バインディング入門

Perl応用

 Perlの応用的な話題について解説しています。

  1. Validator::Customリファレンス - HTMLフォームのバリデーション
  2. DBIx::Customリファレンス - データベースに便利にアクセス
  3. PDLによる統計解析 - PDLモジュールを使った統計解析
  4. PerlプログラマのためのC言語入門 - PerlプログラマのためのC言語の解説です
  5. Perlその他の情報

Perlリファレンス

 Perlのリファレンスです。

Perlその他

 Perlのその他の情報です。

CentOS・Red Hat Linux実践テクニック

 CentOSで利用できるテクニックを紹介しています。

Perl以外の技術情報

 Perl以外の技術情報です。

2015-07-25

make clean,make realcleanをするときに削除するファイルを追加する

 Makefile.PLは自動的にMakefileを作成しますが、このときに「make clean」と「make realclean」で実効されるコマンドが定義されます。

 ときには、特定のファイルを「make clean」「make realclean」するときに、削除したいと思うときがあると思います。

 そのような場合は、Makefile.PLの中のWriteMakefile関数で、以下のオプションを記述することで対応することができます。

clean => {FILES => "*.xyz foo"}
realclean => {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}

 FILESにおいては、makeの文法規則でファイル名を記述する必要があるので、注意してください。


XSによるC/C++バインディング入門

2015-07-02

GitPrep 1.10をリリースしました - CGIにおける利用のインストールの改善

 Githubのクローン、ポータブルなGithubシステムをUnix/LinuxにインストールできるWebアプリケーショGitPrepの1.10をリリースしました。

 自分のサーバーインストールできるので、ユーザーの作成は無制限、プライベートリポジトリも無制限に作成することができます。GitPrepはオープンソースですので、無料で利用することができます。さくらレンタルサーバーなどの共有レンタルサーバーにインストールすることができます。

GitPrep (リポジトリとドキュメント)

 1.10では以下の機能を追加しました。

  • CGIにおける利用ががSuExec以外のサーバーでもできるようになりました。URLは「gitprep/gitprep.cgi」に変更されました。

 自分で管理するサーバーで、SuExecの設定を行わなくても、CGIスクリプトを利用することが可能となりました。手順も新たに追加しています。

 どうぞ、便利にご利用ください。

サンプル

 動いているサンプルはこちらです。さくらのレンタルサーバーのスタンダードで動かしています。こちらでアプリケーションを試すことができます。

GitPrepを試す

ダウンロード

https://github.com/yuki-kimoto/gitprep/archive/latest.zip

ドキュメント

GitPrep ドキュメント


技術ニュースへ

2015-06-06

Kent WebのASKA BBSをMojoliciousを使った実装に移植しました。

 Kent WebのASKA BBSをMojoliciousを使った実装に移植しました。

ASKA BBS(Mojoliciosu version)

 もともとのASKA BBSのページとサンプルはこちらです。

ASKA BBS

サンプル

 プログラムの利用規定です。Kent Webのものを引き継いでいます。

プログラム利用規定

 移植版のASKA BBSは以下のような特徴があります。

特徴

 特徴は以下のようになっています。

  • WebフレームワークMojoliciousを使った掲示板の実装
  • cpanmが内部的には利用され、ワンコマンドで、セットアップが完了
  • Perl 5.10.1以上であることだけが要件。
  • CGIと組み込みのWebサーバーで実行が可能。たとえば、さくらのレンタルサーバー・スタンダードで動かすことができます。

 内部実装の具体的な改善は以下のとおりです。

  • WebフレームワークとしてMojoliciousを利用。
    • HTTPリクエスの解析、パラーメータの受け取り、クッキーの取得処理
    • URLのルーティングの改善、テンプレートの記述を改善、ヘッダ、フッタを部品に
  • グローバルなファイルハンドルは利用せずに、レキシカル変数を使用
  • 必要モジュールのインストールのシステムとしてcpanmを使用
  • Emailの送信にMIME::Liteを使用して簡潔にした
  • ページ送りの処理にData::PageとData::Page::Navigationを利用して簡潔にした。
  • 文字コードのエンコードにはEncodeモジュールを使用。JCodeの使用をなくした。
  • データ保存のときのエンコード処理のロジックを共通化して改善
  • CGIに加えて組み込みWebサーバーで起動ができるので、非常に高速でスケーラビリティがある。
  • 開発サーバーが利用できるので、開発が非常に楽になった。

目的

 このプロジェクトの目的は、古きよきPerl/CGIを、現代的な記述で、記述しなおすことです。レンタルサーバーで、簡単に動かすことができる完成されたWebアプリケーションを、現代的な記述することです。

 ひとつのサンプルを示すことによって、それをお手本にして書き直すことで、現代的なPerlの記述を覚えることができます。古きよきPerlの記述と比較することで、どのような部分が、簡潔で改善されたのかを理解することができるでしょう。

改善点の詳細

 このプロジェクトにおけるいくつかの改善点を、もう少し説明しておきます。

スケーラビリティ

 まずCGIの最大の問題点として、スケーラビリティがないことがあげられます。CGIは、毎回プロセスを起動するので、ある程度のアクセス数が増えてきたところで、パフォーマンスがネックになってきます。

 Mojoliciousを使った、今回の実装においては、CGIで利用できますが、パフォーマンスネックがもし現れてきたならば、組み込みサーバーやPlack/PSGI対応サーバーを使って、スケールアップすることができます。

 これは、PHPの利点によくにています。まず最初は、PHP/CGIで設置するのですが、もしパフォーマンスネックがあらわれるならば、mod_phpを使って、動かせばスケールアップすることができます。

 CGIの欠点は、そう簡単には、スケープアップできないのですが、今回改良されたCGIにおいては、スケープアップを行うことができます。

CPANの利用

 CPANはPerlとはきっても切り離せない存在です。Perlのライブラリの宝庫であるCPANという存在を利用できることが、Perlの大きな利点のひとつです。

 CGIアプリケーションにおいても、CPANを簡単に利用できたら、どんなにうれしいことでしょう。

 現代的なPerlにおいては、cpanmというツールとcpanfileという設定ファイルを利用することで、CPANにあるモジュールを簡単に利用することができるのです。

 cpanfileの中には、モジュールの一覧を記述しています。そして、これらのモジュールをcpanmというツールを使って、プロジェクトのディレクトリ以下に簡単にインストールすることができます。

 このプロジェクトでは、たとえば、MIME::Liteを使って、メール送信の記述を簡略にしたり、Data::Pageというモジュールを使って、ページ送りの記述を簡潔に記述しています。

文字コードをUTF-8、利用するモジュールをEncodeに

 古きよきPerlの時代は、まだUTF-8が存在していませんでしたから、文字コードといえば、EUC-jpやShift_JISでありました。

 そして、文字コードの変換処理といえば、Jcodeでした。

 けれども、現代的なPerlの記述においては、文字コードはUTF-8を、文字コードの扱いには、Encodeモジュールを使うのが、もっともよいです。

 そうすることで、文字列を統一的に扱うことができますし、正規表現も完全に正しく動きます。

ルーティングとテンプレートをWebフレームワークで

 ルーティングとテンプレートはMojoliciousというWebフレームワークで行っています。

 古きよき時代のPerlにおいては、ルーティングとテンプレートは、コードに、べた書きということも少なくありません。非常に記述が、複雑なものになっていました。

 ルーティングとテンプレートをWebフレームワークのものを利用することで、記述が簡潔になっています。

 PHPの利点は、HTMLの中にPHPの記述をかけることですが、Mojoliciousのテンプレートを利用すれば、HTMLの中にPerlの記述を行うことができます。

 ぜひコードを読んで、古きよきPerlと、現代的なPerlの差について、学んでみてください。

2015-06-02

Perl 5.22がリリースされました - 数学関連の機能強化、メソッドのパフォーマンスの改善、正規表現の改善

 2015年6月1日に、最新バージョンのPerl 5.22がリリースされました。

Perl 5.22 リリース

 今回のリリースでは、活発な機能追加が行われています。

パフォーマンスの改善

 Perl 5.22の一番うれしな点は、性能改善です。マルチデリファレンスの構文解析とメソッドの構文解析の改善によって、パフォーマンスがアップしています。

複数階層のデリファレンスの性能改善

 Perlの内部パーサーは、複数階層のデリファレンスを効率的に解析できるようになりました。このために、複数階層のデリファレンスのパフォーマンスが上昇しています。

$scores->[0]{math};
メソッド呼び出しとSUPER擬似クラスの性能改善

 メソッド呼び出しと、SUPER擬似クラスは、事前に解析され、その情報がキャッシュされるようになっています。そのため、実行時の、メソッド呼び出しのパフォーマンスが上昇しています。

$obj->method
$obj->SUPER::method;
length関数の性能改善

 length関数は、UTF-8ではない文字列に関して20%パフォーマンスがアップしています。

配列とハッシュの性能改善

 キーが、定数か、単純な変数だった場合に、配列とハッシュの要素へのアクセスが速くなっています。

Perl 5.22の機能の追加

 Perl 5.22では、数学関連の機能の改善などが行われています。

C99の数学関数が利用できるようになりました

 PerlでC99でサポートされている数学関数を、POSIXモジュールを通じて利用できるようになりました。

atanh
tgamma
無限とNaN(数値でない)の扱いの改善

 InfとNaNがより堅固に利用できるようになりました。

16進の浮動小数点の解析が向上しました

 16進の浮動小数点の解析が向上しました。また、16進で浮動少数点を記述するリテラルが追加されています。

0x1.23p-4

 これで、Perlレベルで、マシンレベルと誤差のない数値を表現することが可能になっています。

 このようにPerl 5.22では、数学関連の機能がかなり改善されています。

通常の括弧をキャプチャに利用しないフラグ

 Perl 5.22では、正規表現の新しいフラグとして、通常の括弧をキャプチャに利用しないフラグが追加されました。これによって、複雑な正規表現を書くときに、キャプチャしない括弧「(?:)」を使わないで、簡潔に記述することができるようになりました。

 "hello" =~ /(hi|hello)/n

 括弧を使っていますが、この括弧はキャプチャしません。nオプションを使った場合に、キャプチャをしたい場合は、次のようにします。

"hello" =~ /(?-n:(hi|hello))/n;   # $1 は "hello"
"hello" =~ /(?<greet>hi|hello)/n; # $1 は "hello", $+{greet} も "hello"

 複雑な正規表現を書くときは、nオプションと、名前つきキャプチャと組み合わせると見やすいのではないでしょうか。

Unicode 7.0のサポート

 Perl 5.22ではUnicode 7.0がサポートされました。Unicodeのサポート対応はPerlはとても早いです。

リファレンスを通したエイリアス

 Perlの機能としてエイリアスという機能が存在しているのですが、これが構文レベルで呼び出せるようになりました。この機能は実験的です。

use experimental::refaliasing;

my $nums = [1, 2, 3];
my $nums_alias;
\$nums_alias = \$nums;
定数関数のサポート

 constサブルーチン属性によって、定数関数がサポートされました。関数は一度実効されるとその値は保存され、2回目以降は、その値を利用します。この機能は実験的です。

my $value = sub : const { 100 * 100 };
ダブルダイヤモンドオペレーター - より安全なダイヤモンドオペレーター

 より安全なダブルダイヤモンドオペレーター「<<>>」がサポートされました。従来のダイヤモンドオペレーターは、二引数のopen関数を内部的に利用していましたが、ダブルダイヤモンドオペレーターは、三引数のopen関数を利用します。

my $line = <<>>;
encodingモジュールがレキシカルスコープを持つようになりました

 encodingモジュールは非推奨なモジュールですが、まだ生存期間中です。それで、機能の改善としてencodingを利用したときの影響の範囲が、グローバルなものから、レキシカルなものになっています。encodingモジュールを、ファイル単位などで、部分的に利用できるようになりました。

非推奨になった機能

警告をすべて致命的なエラーに変換することは、非推奨となりました。

 警告をすべて致命的なエラーにする記述は、非推奨となりました。次の記述は、今後は、非推奨ですので、避けましょう。

use warnings FATAL => 'all';

 これは、Perlのコアが新しい警告を追加したときに、そのために、今まで動いていたアプリケーションが、エラーによってとまってしまうというリスクがあるためです。Perlのコアチームが、完全な互換性ではなく、新しい警告を安全に追加できるほうを選択したようです。僕も、これには、賛成です。

非互換な変更

 次の記述がエラーになりました。

defined(@array)
defined(%hash)

 この記述は5.6.1の時点で、廃止予定となっており、5.16で、廃止予定の警告が発せられるようになっていましたが、5.22で、エラーとなりました。Perlをバージョンアップするときは、古いソースコードには、この記述がある可能性がありますので、注意してください。

コアからはずれたモジュール

CGIモジュールがコアからはずれました

 CGIモジュールがコアからはずれました。これは驚きもあるかもしれませんが、時代の流れでもあります。以後は、CPANから、インストールして、利用してください。

 現在では、Webフレームワークを利用して、Webアプリケーションを開発することが主流になっています。以下のページから、Web開発に必要なフレームワークを探すことができます。

Task::Kensho::WebDev:_Web_Development

Module::Buildがコアからはずれました

 Module::Buildがコアからはずされました。Module::Buildが必要なときは、自動的にCPANからインストールされる仕組みがPerlには、存在するということと、コアの管理をなるべく小さくするという目的のためはずされました。

まとめ

 感想を述べると、まずPerlが数学関連の機能を強化したことに好感が持てます。Perlが遅れている分野をカバーする機能追加が行われたのは、うれしいことです。

 また、メソッドと複数階層のデリファレンスのパフォーマンスがアップしたのは、とてもよいことだと思います。たとえば、PerlのWebフレームワークのMojoliciousでは、Perl5.22にバージョンアップすると、20%以上のパフォーマンスの改善があったということも、報告されていました。

 また、うれしいのは、警告を致命的なエラーに変換することが非推奨になったことによって、「use warnings」が「use v5.xx」としたときに、加えることができる可能性の道が開けたことです。早めの方針転換が、後々の機能改善に利いてきますので。


ニュース