パッケージサブルーチンとbless

Perl初心者のためのPerlノートです!

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

◆ はじめに

本ページは、私がPerlを習得した時(いや習得中)のノートです。

ごく普通の言語(COBOL,C,Java,VB等)を知っている人が、Perlをやり始めるといろいろと悩むことがあります。

それは、

です。

本ページは、そのようなハードルを一つ一つクリアにしていけたらと思います。

そして、本ページが何かのお役に立てれば幸いです。では、ごゆっくりご覧ください。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

◆ サイト最新情報

◆ コンテンツ

2009-05-21 パッケージサブルーチンとbless

えーと実は、サブルーチンは必ずどこかのパッケージに属しています。

そう、パッケージ宣言しないと自動的にmainパッケージになるのです。


そして、サブルーチンのコールには、以下の4通りがあるのです(他にもあるかも)。

  1. パッケージデリミタを使ってサブルーチンコール
  2. 矢印演算子を使ってサブルーチンコール
  3. blessを使ってサブルーチンコール
  4. 無名サブルーチンリファレンスを使ってサブルーチンコール

◆サンプル(bless.pl)
use strict;
use warnings;

    # 1.パッケージ名からパッケージデリミタを使ってサブルーチンコール
    main::test(10);
    package01::test(10);
    package01::test2(100);

    # 2.パッケージ名から矢印演算子を使ってサブルーチンコール
    main->test(20);
    package01->test(20);
    package01->test2(200);

    # 3.blessを使ってサブルーチンコール
    my $test;
    $test = bless \$test, 'main'; 
    $test->test(30);
    $test = bless \$test, 'package01'; 
    $test->test(30);
    $test->test2(300);

    # 4. 無名サブルーチンリファレンスを使ってサブルーチンコール
    $test = sub {print "無名サブルーチンで引数は-->@_<--です。", "\n"; };
    $test->(40);
    sub {print "無名サブルーチン2で引数は-->@_<--です。", "\n"; }->(400); # 即実行

sub test {
    print "mainパッケージのサブルーチンで引数は-->@_<--です。", "\n";
}

package package01;
sub test {
    print "package01パッケージのサブルーチンで引数は-->@_<--です。", "\n";
}
sub test2 {
    print "package01パッケージのサブルーチン2で引数は-->@_<--です。", "\n";
}

◆実行結果
C:\samp_pl>perl bless.pl
mainパッケージのサブルーチンで引数は-->10<--です。
package01パッケージのサブルーチンで引数は-->10<--です。
package01パッケージのサブルーチン2で引数は-->100<--です。
mainパッケージのサブルーチンで引数は-->main 20<--です。
package01パッケージのサブルーチンで引数は-->package01 20<--です。
package01パッケージのサブルーチン2で引数は-->package01 200<--です。
mainパッケージのサブルーチンで引数は-->main=REF(0x1ac65d0) 30<--です。
package01パッケージのサブルーチンで引数は-->package01=REF(0x1ac65d0) 30<--です。
package01パッケージのサブルーチン2で引数は-->package01=REF(0x1ac65d0) 300<--です。
無名サブルーチンで引数は-->40<--です。
無名サブルーチン2で引数は-->400<--です。
◆補足

1は、ごく普通のサブルーチンコールです。まぁ、メインパッケージの時は修飾しないけど・・・。

2は、第一引数が自動的にパッケージ名(クラス名)になります。

3は、第一引数が自動的に変数のリファレンス(オブジェクト)になります。

4は、ごく普通の無名サブルーチンコールです。


補足の通り、微妙に違いがあるのだけれど、なんで4通りも必要なのか・・・それは・・・

実は、パッケージは一種のクラスで、何かのリファレンスをblessしてクラスと紐付けるとオブジェクトになるのです。

つまり、Perlでのオブジェクト指向の布石なのですね・・・これが。

◆ おすすめ Perl本

■ 続・初めてのPerl 改訂版

『初めてのPerl』の次ぎに読むと吉です。

結構いいですが・・・、初心者にはちょっと難しいかもです。

■ 結城浩のPerlクイズ

この本には、ちゃいちゃんパパの小話しが載っています(謎)。

ある程度、Perlを理解している人には、たまらない内容になっています。さすが結城先生だな!

結城浩のPerlクイズ

■ 新版Perl言語プログラミングレッスン入門編

実は、私はまだ読んでいませんが、結城先生の本なので良くないはずがありません。

新版Perl言語プログラミングレッスン入門編

■ CGI&Perlポケットリファレンス (Pocket reference)

この本は、非常に役に立ちます。ちょっと調べるのに最適です。サンプルも説明も的を射ています。

CGI&Perlポケットリファレンス (Pocket reference)

■ Perlベストプラクティス

一読の価値有りだと思います。

Perlベストプラクティス

■ プログラミングPerl〈VOLUME1〉

ご存知、Perl本の聖書、ラクダ本(上)です。

■ プログラミングPerl〈VOLUME2〉

ご存知、Perl本の聖書、ラクダ本(下)です。

◆ おわりに

最後に、本ページが、何かのお役に立てれば幸いです。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo