##
my classA | classH $x = what_does_it_return();
##
##
$x->something()
##
##
package classA;
sub something (classA $self) { ... }
##
##
sub what_does_it_return () return classX {
return rand(1) > 0.5
? bless( [], 'classA' )
: bless( {}, 'classH' );
}
##
##
my classX $x = what_does_it_return();
$x->something() # compile-time blowup, classX doesn't have the "something" method!