第26回 別パッケージの関数を呼び出すいろいろな方法 まとめ
さあ、
別パッケージを呼び出す方法が、たくさん出てきたので、混乱してきたところではないだろうか?
いままでのところをまとめよう。
別パッケージの関数を呼び出す方法
- パッケージ名::関数名
- blessされた変数->関数名
- 'パッケージ名'->関数名
- パッケージ名->関数名
この 4つの方法がでてきたわけだが、
下3つに共通しているのは、 -> 記号で関数を呼んでることである。
前回の最後のソースを実行してみよう
それでは、前回の最後のソースを実行してみよう!
先ほども述べたが、別パッケージを呼び出す方法は、
- で呼び出す方法
- > で呼び出す方法
に大別できるのである。 この違いを示すのが、前回のソースである。
(再掲)
use strict; package Hoge; sub h { my $z = shift; print "$z", "\n"; # 関数に与えられた第1引数を表示 } package main; Hoge::h(); # 呼び出し! :: バージョン print '--------------', "\n"; Hoge->h(); # 呼び出し! -> バージョン
結果:
-------------- Hoge
??? さて? この結果が意味するところはなんなのであろうか?
結果から言えること
- で呼んだ方には、何も表示されていない。
- > で呼んだ方は、Hogeと表示された。
h()関数がしていることは、第1引数の表示である。
そう。
- で呼んだ方は、第1引数を表示できていない、
- > で呼んだ方は、第1引数を表示できた のである。
実は
- > は、なんと! 見えないところで第1引数が増えているのである!!!!!
ちなみに、
'Hoge'->h();
と
Hoge->h();
は同じであるので、 h()関数に、'Hoge'が渡ったことになり、それが表示されたのだ!
第1引数に、 -> の左の部分が渡るか、渡らないか! これが大きな違いである!!!
->記号を混乱するな!
しかしだ!!!
今回の->記号は、デリファレンスの記号でもなんでもない!!!!
ただ、「パッケージの関数呼び出しの機能 と 第1引数に ->の左の部分を与える」 というこの意味しかもっていないのである。
blessされたやつはどうなったか
blessされたもので -> 記号で関数呼び出しするのも、まったく同じで、第1引数に、blessされた変数が渡っているのである。
その話は、また次回
それでは また〜