use constant HAS_HTML_TIDY => do { local $@; eval { require HTML::Tidy; 1 } or do { unless ( eval { require XML::Clean; 1 } ) { die( "Please install HTML::Tidy (preferred) or XML::Clean first" ); } 0; # Has XML::Clean but no HTML::Tidy }; }; ... sub parse_file { ... if (HAS_HTML_TIDY()) { }