Exporter::@EXPORT

Exporterの@EXPORTにどんどん公開メソッドを追加していけば、どんどん見える。
逆に、追加しないメソッドは非公開メソッドになる・・・かというとそういうわけではないというか・・・。

Exporter - 関数をエクスポートする - Perl入門ゼミ

CustomModule.pmで、

public_method_2を@EXPORTに追加して、private_methodは追加しない。
public_method_2の中で、private_methodを呼ぶことはする。

#!/usr/bin/perl

# CustomModuleをuseで読み込む.
use CustomModule;

# CustomModuleの公開メソッドを呼ぶ.
public_method_1(); # public_method_1を呼ぶ.

# CustomModuleの非公開メソッドは直接呼べない.
private_method(); # private_methodは見えない.

このように直接呼ぶ事は、

$ vi Exporter.pl
$ perl Exporter.pl
This is BEGIN.
public_method_1.
Undefined subroutine &main::private_method called at Exporter.pl line 10.
$

出来ない。
しかし、

#!/usr/bin/perl

# CustomModuleをuseで読み込む.
use CustomModule;

# CustomModuleの公開メソッドを呼ぶ.
public_method_1(); # public_method_1を呼ぶ.

# CustomModuleの非公開メソッドは直接呼べない.
#private_method(); # private_methodは見えない.
CustomModule::private_method(); # パッケージ名を付けると呼べる.

パッケージ名を付けた場合は、

$ vi Exporter.pl
$ perl Exporter.pl
This is BEGIN.
public_method_1.
private_method.
$

呼べてしまう。

public_method_2経由で呼び出した方が、

$ vi Exporter.pl
$ perl Exporter.pl
This is BEGIN.
public_method_1.
private_method.
public_method_2.
private_method.
$

お行儀良いのだけれど。

Sample/perl/Exporter/EXPORT/src/Exporter at master · bg1bgst333/Sample · GitHub