◆ はじめに
本ページは、私がPerlを習得した時(いや習得中)のノートです。
ごく普通の言語(COBOL,C,Java,VB等)を知っている人が、Perlをやり始めるといろいろと悩むことがあります。
それは、
- 暗号のような記号のオンパレード
- 文脈(コンテキスト)によって意味の違う関数
- 構造体がないデータ構造
- 同名で意味が違う変数
- 比較先がない比較
- 代入文がないのに代入される
- 正規表現の拡張
- return文がないリターン値
- foreach文がいつのまにかfor文に
- サブルーチンなのに関数に
- ファイル名がいつのまにかハンドル名に
です。
本ページは、そのようなハードルを一つ一つクリアにしていけたらと思います。
そして、本ページが何かのお役に立てれば幸いです。では、ごゆっくりご覧ください。
尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。
◆ サイト最新情報
◆ コンテンツ
■ サブルーチンへのリファレンス
たとえば、何かの関数のリターン値が想定でき、リターン値毎にサブルーチンをコールする場合、普通の言語では、if文でロジックを組みます。
Perlでは、もちろんif文でも大丈夫ですが、Perl的(謎)にはリターン値をハッシュキーとして、サブルーチンへのリファレンスをハッシュ変数に格納し、コールすることができます。
use strict;
my $rc = 401;
my $pm = "hikisu";
# if文でのロジック(普通の言語風)
if ($rc == 200) {
&sub01($pm);
}
elsif ($rc == 401) {
&sub02($pm);
}
elsif ($rc == 403) {
&sub03($pm);
}
else{
print "サブルーチン該当なし\n";
}
# サブルーチンリファレンスをハッシュに格納
my %sub;
$sub{200} = \&sub01;
$sub{401} = \&sub02;
$sub{403} = \&sub03;
# ハッシュ値に従って該当サブがコール
#eval {&{$sub{$rc}}($pm);};
#if ($@) { # $@には、エラー時にエラーメッセージが入り、状態が真となる。
# print "サブルーチン該当なし\n";
#}
# 上の実行文と等価
#eval {$sub{$rc}->($pm);};
#if ($@) {
# print "サブルーチン該当なし\n";
#}
if ( exists $sub{$rc} ) {
$sub{$rc}->($pm);
}
else {
print "サブルーチン該当なし\n";
}
#----------------------------------------------------
sub sub01 {
print "--- sub01 $_[0]---\n";
}
sub sub02 {
print "--- sub02 $_[0]---\n";
}
sub sub03 {
print "--- sub03 $_[0]---\n";
}
尚、いくら想定ができても、想定内だけのロジックはよくないです。
どんな場合でも想定外を考えてロジックを組まないと、痛い目に会うぞ。
◆ おすすめ Perl本
■ 続・初めてのPerl 改訂版
『初めてのPerl』の次ぎに読むと吉です。
結構いいですが・・・、初心者にはちょっと難しいかもです。
■ 結城浩のPerlクイズ
この本には、ちゃいちゃんパパの小話しが載っています(謎)。
ある程度、Perlを理解している人には、たまらない内容になっています。さすが結城先生だな!
■ 新版Perl言語プログラミングレッスン入門編
実は、私はまだ読んでいませんが、結城先生の本なので良くないはずがありません。
■ CGI&Perlポケットリファレンス (Pocket reference)
この本は、非常に役に立ちます。ちょっと調べるのに最適です。サンプルも説明も的を射ています。
■ Perlベストプラクティス
一読の価値有りだと思います。
■ プログラミングPerl〈VOLUME1〉
ご存知、Perl本の聖書、ラクダ本(上)です。
■ プログラミングPerl〈VOLUME2〉
ご存知、Perl本の聖書、ラクダ本(下)です。
◆ おわりに
最後に、本ページが、何かのお役に立てれば幸いです。
尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。