曖昧なメソッド呼び出し
{
package Foo;
sub foo{}
}
{
package Bar;
sub foo{}
}
{
package Baz;
use parent -norequire => qw(Foo Bar);
}
Baz->foo(); # Ambiguous!
こんなときのBaz->foo()はメソッド解決順序(MRO)に依存している曖昧なメソッド呼び出しです。
C++だと,このようなケースはそもそもコンパイルが通りません*1。うらやましい。
しかしあるいはPerlでも警告を出せれば…と思ったんですがなかなかむずかしい。
*1:継承しただけではエラーにはならず,foo()を呼び出す段階でエラーになります。なお,usingディレクティブを使って曖昧さを解決することができます。