Perlでの『間接オブジェクト形式』とは
以下のつづきです。
以下のような形式でメソッドを起動することを『間接オブジェクトを使ったメソッドの起動』と言います。
METHOD INVOCANT (LIST) METHOD INVOCANT LIST METHOD INVOCANT
ちなみに、INVOCANT(インボカント)とは、パッケージ名(クラス名)または、オブジェクトを指すリファレンスです。
たとえば、newメソッド(インボカントはCar)とprintメソッド(インボカントはSTDERR)の場合は、以下の感じです。
$mycar = new Car('Green', 'セレナ', 2000); print STDERR 'エラー情報1', "エラー情報2\n";
しかし、この『間接オブジェクト形式』には、2つの落とし穴あります。
1つ目は、他のリスト演算子と同じようにパースされるので、&&とandや||とorの優先順位の違いに注意が必要とされる。
たとえば、以下の感じ。
print STDERR "エラー情報\n" and exit(); # 『エラー情報』が表示される print STDERR "エラー情報\n" && exit(); # 『エラー情報』が表示されない
2つ目は、INVOCANTに使えるのが、名前、添え字なしのスカラー変数、またはブロックだけに限られる。
たとえば、以下の感じ。
move $riders[$i];
は、
$riders[$i]->move;
でなく
$riders->move([$i]);
と解釈される。