use List::Util qw[ first ]; my $class = first { eval "use $_; 1" } qw[ YAML::XS YAML::Syck YAML::Tiny YAML]; #### use List::Util qw[ first ]; use Class::Load qw[ load_first_existing_class is_class_loaded ]; my @CLASSES = qw[ YAML::Tiny YAML::XS YAML::Syck YAML ]; my $class = ( first { is_class_loaded $_ } @CLASSES ) || ( load_first_existing_class @CLASSES );