曖昧なメソッド呼び出し
{ 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ディレクティブを使って曖昧さを解決することができます。