my $bad; BEGIN { eval { require Foo }; if ($@) { $bad = "Foo"; warn "This requires $bad to work. " . "You can get it at ... "; } } sub new { return undef if $bad; ...etc... }