perlプログラムチェック事項
外部モジュールを使用するとき
外部モジュール(別ファイルの意味)を作成して、必要なプログラムで取り込むとき(require,use)
外部モジュールのソースを走査するらしい。この走査に対してリターンコードを設定しないと取り込みに失敗する。
具体的には文末に「return 1;」と記述する。このリターン文はサブルーチンの最後ではなく、文の最後に記述する。
つまりサブルーチンの範囲を示す括弧の中ではなく、大外に(本当に最後の行)記述しないといけない。
CやJavaなどのコンパイラ言語に慣れていると、感覚が合わないので注意。
C言語との相違点
参照をサブルーチンやモジュール内で使用するとき、参照元の変数がローカルの時、ルーチンの外へ復帰すると、
C言語では参照を利用できない(コンパイルはできるが発見しにくいバグになる)。
理由は参照先のアドレスが返却されており、別の内容に書き換えられている可能性があるから。
しかし、Perlでは参照を利用すると参照先のアドレスに対し自動的にリファレンスカウンタが生成され、
このカウンタがゼロに戻るまで資源は確保されている。つまりローカルスコープの資源への参照も問題が無い。
クラス内のメソッド同士で呼び出す時の注意
C++/Javaではインスタンス変数をコンパイラが確保しているので同一クラスのメソッド間では引き渡す必要がない。
しかしPerlではクラスはただのサブルーチンなので同一クラス内でも引き渡す必要がある
例 同一クラス内のDESTROYがCloseをCallする
#******デストラクタ******
sub DESTROY
{
my $self = shift; # C++/Javaでは不要なので忘れてしまう。
Close($self); # 引き渡さなくてもコンパイルエラーにはならない。実行するまで事象が判明しない
}
#******close******
sub Close
{
・・・