BEGIN {
my @yaml_classes = qw{YAML::XS YAML::Syck YAML::Tiny YAML};
first { eval "use $_; 1" } @yaml_classes
or die "Unable to load any of these YAML classes: @yaml_classes";
}
####
Unable to load any of these YAML classes: YAML::XS YAML::Syck YAML::Tiny YAML at ...
BEGIN failed--compilation aborted at ...
##
##
my $yaml_class;
BEGIN {
my @yaml_classes = qw{YAML::XS YAML::Syck YAML::Tiny YAML};
$yaml_class = first { eval "use $_; 1" } @yaml_classes
or die "Unable to load any of these YAML classes: @yaml_classes";
}
print $yaml_class;
##
##
BEGIN {
# YAML classes to attempt to load (in order of preference)
my @yaml_classes = qw{YAML::XS YAML::Syck YAML::Tiny YAML};
# Expecting to import these functons from whatever YAML class is loaded
my @yaml_imports = qw{Dump Load};
my $yaml_class = first { eval "use $_ (\@yaml_imports); 1" } @yaml_classes
or die "Unable to load any of these YAML classes: @yaml_classes",
" (using import list: @yaml_imports)";
}
##
##
BEGIN {
my @yaml_classes = qw{YAML::XS YAML::Syck YAML::Tiny YAML};
my $yaml_class = first { eval "use $_; 1" } @yaml_classes
or die "Unable to load any of these YAML classes: @yaml_classes";
# Only expecting whatever YAML class is loaded to export these functions
my @yaml_funcs = qw{Dump Load};
no strict 'refs';
my %yaml_exports = map { $_ => 1 } @{$yaml_class . "::EXPORT"};
$yaml_exports{$_} or die "$yaml_class doesn't export '$_'" for @yaml_funcs;
}