kivitendo/modules/override/YAML/Any.pm @ d88c278c
c6bc1816 | Sven Schöling | use strict; use warnings;
|
|
package YAML::Any;
|
|||
our $VERSION = '1.14';
|
|||
use Exporter ();
|
|||
@YAML::Any::ISA = 'Exporter';
|
|||
@YAML::Any::EXPORT = qw(Dump Load);
|
|||
@YAML::Any::EXPORT_OK = qw(DumpFile LoadFile);
|
|||
my @dump_options = qw(
|
|||
UseCode
|
|||
DumpCode
|
|||
SpecVersion
|
|||
Indent
|
|||
UseHeader
|
|||
UseVersion
|
|||
SortKeys
|
|||
AnchorPrefix
|
|||
UseBlock
|
|||
UseFold
|
|||
CompressSeries
|
|||
InlineSeries
|
|||
UseAliases
|
|||
Purity
|
|||
Stringify
|
|||
);
|
|||
my @load_options = qw(
|
|||
UseCode
|
|||
LoadCode
|
|||
);
|
|||
my @implementations = qw(
|
|||
YAML::XS
|
|||
YAML::Syck
|
|||
YAML::Old
|
|||
YAML
|
|||
YAML::Tiny
|
|||
);
|
|||
sub import {
|
|||
__PACKAGE__->implementation;
|
|||
goto &Exporter::import;
|
|||
}
|
|||
sub Dump {
|
|||
no strict 'refs';
|
|||
no warnings 'once';
|
|||
my $implementation = __PACKAGE__->implementation;
|
|||
for my $option (@dump_options) {
|
|||
my $var = "$implementation\::$option";
|
|||
my $value = $$var;
|
|||
local $$var;
|
|||
$$var = defined $value ? $value : ${"YAML::$option"};
|
|||
}
|
|||
return &{"$implementation\::Dump"}(@_);
|
|||
}
|
|||
sub DumpFile {
|
|||
no strict 'refs';
|
|||
no warnings 'once';
|
|||
my $implementation = __PACKAGE__->implementation;
|
|||
for my $option (@dump_options) {
|
|||
my $var = "$implementation\::$option";
|
|||
my $value = $$var;
|
|||
local $$var;
|
|||
$$var = defined $value ? $value : ${"YAML::$option"};
|
|||
}
|
|||
return &{"$implementation\::DumpFile"}(@_);
|
|||
}
|
|||
sub Load {
|
|||
no strict 'refs';
|
|||
no warnings 'once';
|
|||
my $implementation = __PACKAGE__->implementation;
|
|||
for my $option (@load_options) {
|
|||
my $var = "$implementation\::$option";
|
|||
my $value = $$var;
|
|||
local $$var;
|
|||
$$var = defined $value ? $value : ${"YAML::$option"};
|
|||
}
|
|||
return &{"$implementation\::Load"}(@_);
|
|||
}
|
|||
sub LoadFile {
|
|||
no strict 'refs';
|
|||
no warnings 'once';
|
|||
my $implementation = __PACKAGE__->implementation;
|
|||
for my $option (@load_options) {
|
|||
my $var = "$implementation\::$option";
|
|||
my $value = $$var;
|
|||
local $$var;
|
|||
$$var = defined $value ? $value : ${"YAML::$option"};
|
|||
}
|
|||
return &{"$implementation\::LoadFile"}(@_);
|
|||
}
|
|||
sub order {
|
|||
return @YAML::Any::_TEST_ORDER
|
|||
if @YAML::Any::_TEST_ORDER;
|
|||
return @implementations;
|
|||
}
|
|||
sub implementation {
|
|||
my @order = __PACKAGE__->order;
|
|||
for my $module (@order) {
|
|||
my $path = $module;
|
|||
$path =~ s/::/\//g;
|
|||
$path .= '.pm';
|
|||
return $module if exists $INC{$path};
|
|||
eval "require $module; 1" and return $module;
|
|||
}
|
|||
croak("YAML::Any couldn't find any of these YAML implementations: @order");
|
|||
}
|
|||
sub croak {
|
|||
require Carp;
|
|||
Carp::croak(@_);
|
|||
}
|
|||
1;
|