sub new { ...... if ($class =~ /Bio::SeqIO::(\S+)/) { ...... return $self; } else { ...... if ($class eq 'Bio::SeqIO::MultiFile') { return $class->new(%param); } ...... return "Bio::SeqIO::$format"->new(@args); } } The Second "if" statement will never be executed.