[Original code deleted; see update below] #### sub get_cog { my ($self) = @_; my $class = ref $self; if ( $class eq "Thingy" ) { return Thingy::Cog->new; } else { my $cog_class = "$class\::Cog"; (my $cog_class_file = $cog_class . "pm") =~ s{::}{/}; if ( grep { -e $_ } map { $_/$cog_class_file } @INC ) { require $cog_class_file; return $cog_class->new; } else { return Thingy::Cog->new; } } }