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

サンプルコードによるPerl入門 〜 安定と信頼のPerlを学ぼう 〜

「サーバ/インフラエンジニア養成読本 基礎スキル編」
2015年4月30日に発売されました! ぜひ書店でお手にとりください。

3000-01-01

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

 サンプルコードを中心としたPerlの入門サイトです。 Perlを使ったWebサイトの作り方も解説しています。関数やモジュールなPerlの便利な機能の解説も行っています。

「サイトの表示が、はてなデフォルトのスマートフォン、タブレット表示」の場合は「レスポンシブルなサイト表示」をこちらから行うことができます

Perl基礎

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

Perl
基礎

Perl基礎 - Perlの基礎を覚えよう

Mojolicious入門

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

Mojolicious
入門

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

Mojoliciousリファレンス

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

Mojolicious
リファレンス

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

Perl書籍

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

Perl
書籍

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から呼び出す方法について解説します。

Perl XS
入門

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-05-27

業務に役立つPerlが増刷されました。Mojoliciousがバージョン6に対応しています。

 おかげさまで、業務に役立つPerlが増刷されました。増刷分は、Mojoliciousがバージョン6に対応しています。

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)

もっと自在にサーバを使い倒す 業務に役立つPerl (Software Design plus)

古い版の方のための、Mojoliciousの部分の修正部分

 古い版を購入された方のために、Mojoliciousの部分の修正部分を開示しておきます。ぜひお役立てください。

p252 上部 ソースコード $self->render_text('Hello!') を $self->render(text => 'Hello!') に修正

p253 上部 「render_textメソッドを使用します」を「renderメソッドでtextオプションを使用します。」

p255 上部 ソースコード $self->render_text($date) を $self->render(text => $date) に修正

p256 下部 ソースコード $self->render_text(省略) の部分を $self->render(text => 省略) に修正

p258 上部 ソースコード $self->render_text(省略) の部分を $self->render(text => 省略) に修正

p258 上部 ソースコード url_for('create') の部分を url_for('/create') に修正

p260 中 「またparamsメソッドを〜することができます。my @param_names = $self->param」を削除して

 同じ位置に以下を挿入。

  またevery_paramメソッドを使用すると、パラメーターが複数の値を持つ場合にすべての値を取得できます。

  ---------------

my $titles = $self->every_param('title');

---------------

p267 上部 「url_forメソッドはルート名と〜で利用できます」を削除して以下に差し替え。

 url_forメソッドを使えば、ルート名とパラメータからURLを生成することもできます。

p269 上部 ソースコード 「$self->render_json({message => 'Hello World'});」を

 「$self->render(json => {message => 'Hello World'});」に修正

p270 下部 ソースコード 「$self->render_json({message => 'Hello World'});」を

 「$self->render(json => {message => 'Hello World'});」に修正

p274 「Mojoliciousドキュメント 日本語訳プロジェクト」のURLを以下に修正。

https://github.com/yuki-kimoto/mojolicious-guides-japanese/wiki

2015-05-23

DBIx::Custom 0.35リリース - DBIx::Custom::Whereクラスにjoin属性の追加

 DBIx::Custom 0.35をリリースしました。DBIx::Customは、Perlでデータベースへの操作を簡単に行うための便利なモジュールです。DBIのラッパーとして動作します。

DBIx::Custom - CPAN

 今回は、DBIx::Custom::Whereクラスに、join属性を追加しました。select分では、whereを記述するためには、joinを記述する必要がある場合が多いです。

 そこで、DBIx::Custom::Whereクラスでもjoinを設定することができるようにしました。

 たとえば、次のようなbookテーブルとauthorテーブル、本と著者の関係を示すbook_authorテーブルがあったと考えてください。本と著者は、多対多の関係です。

book

row_ididname
1001Perl
2002SQL

author

row_ididname
10001木本
20002田中

book_author

row_idbookauthor
111
221

 このような関係のテーブルにおいて、著者が木本である本の名前を検索するには、次のようなSQLを発行する必要があります。

select book.name
  from book
  left join (
    select distinct(book)
    from book_author
    where author = 1
  ) as t1 on book.row_id = t1.book
  where t1.book is not null;

 つまり、このような場合は、メインのwhereを書くためには、サブクエリで作成したテーブルをjoinする必要があるということです。

 それで、DBIx::Custom::Whereクラスでjoinを指定できるようにしました。

my $where = $dbi->where;
$where->join([
  'left join (select distinct(book) from book_author where :book.author{=}) as t1 on book.row_id = t1.book'
])
$where->clause(['and', 't1.book is not null']);
$where->param({'book_author.author' => 1});

my $rows = $dbi->select(
  ['book.name'],
  where => $where
)->all

 これでさらに柔軟にWhere句を生成できるようになりました。


ニュース

2015-05-19

Validator::Custom 0.27をリリース - 文法の改善、複数の値の統一的な扱い、ORバリデーションの改善

 Perl製のフォームバリデーションモジュールであるValidator::Customの0.27をCPANにリリースしました。

Validator::Custom 0.27リリース

 最近の変更では、互換性は維持したまま、Mojolicious::Validatorに可能な範囲で文法を近づける努力をしています。バリデーションの機能としては、Validator::Customの方が、まだまだ細かくカスタマイズできます。

use Validator::Custom;

my $vc = Validator::Custom->new;

# my $data = {
  name => 'kimoto',
  age => '   19   '
};

# ルールの作成
my $rule = $vc->create_rule;

# チェックの追加
$rule->require('name')->check('not_blank');
$rule->require('age')->filter('trim')->check('int');
$rule->optional('height')->check('int')->default(-1);

 Validator::Custom 0.27の機能をいくつか紹介します。

複数の要素を持つ値の検証が容易に

 HTMLフォームで、複数の値を検証するというのは結構面倒です。次のようなパターンをすべて考えて、それぞれの要素を処理しなければならないからです。

  1. 値が存在しない場合
  2. 値が存在するが空文字列の場合
  3. 値がひとつ存在する場合
  4. 値が複数存在する場合

 ほしいデータとしては、空白の文字列を除いたデータを配列のリファレンスでほしいと思います。そうすれば、統一的に扱うことができるからです。Validator::Custom 0.27では、次のように記述することで、簡単に扱うことができるようになりました。

$rule->require('feature')
  ->filter('to_array_remove_blank')
  ->check({selected_at_least => 1})
  ->each(1)->check('int');

 新しく追加されたto_array_remove_blankフィルターで、空白文字をのぞいた配列に変換できます。その後に、少なくともひとつ選択されているチェックを行います。配列に変換した後は、eachオプションで、配列の各要素をチェックするようにできます。この後に、checkメソッドを呼び出します。

 eachオプションは「'@int'」のような記述の改善として準備されました。今後は、eachオプションを使うのが推奨です。

 また次のようにすることもできます。これは値が無い場合を許容する場合です。

$rule->optional('feature')
  ->filter('to_array_remove_blank')
  ->check({selected_at_least => 1})
  ->each(1)->check('int')
  ->default(sub { [] });

 デフォルト値が設定できますが、文字列と数値以外の場合は「sub { }」で囲う必要があります。

ORのバリデーションのためのcheck_orメソッドの追加

 check_orメソッドを使って、ORのバリデーションが簡単にできるようになりました。

$rule->require('age')->check_or('blank', 'int');

 check_orメソッドは「'blank || int'」のような記述の改善として準備されました。今後はcheck_orを使うようにしてください。


ニュースへ

2015-05-12

4年ぶりのShibuya Perl Mongersテクニカルトークが行われるようです

 2015年6月2日(火)に、株式会社ディー・エヌ・エーの本社で、Shibuya Perl Mongersテクニカルトークが行われるようです。

Shibuya Perl Mongersテクニカルトーク#17

日時 - 2015年6月2日(火) 18:50-21:00 (18:30 開場)

会場 - 渋谷ヒカリエ21F DeNA本社(受付11F) (株式会社ディー・エヌ・エー)

料金 - 無料

定員 - 150名

Shibuya Perl Mongersテクニカルトーク#17

 4年ぶりの開催ですね。司会は竹迫さん、トークは、そうそうたるメンバーです。