YAML-PP
view release on metacpan or search on metacpan
bin/yamlpp-load-dump view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use YAML::PP;
use YAML::PP::Dumper;
use YAML::PP::Common qw/
:PRESERVE
/;
use Encode;
use Getopt::Long;
Getopt::Long::Configure('bundling');
GetOptions(
'help|h' => \my $help,
'boolean=s' => \my $boolean,
'cyclic' => \my $cyclic,
'duplicate-keys' => \my $duplicate_keys,
'indent=i' => \my $indent,
'width=i' => \my $width,
'header!' => \my $header,
'footer!' => \my $footer,
'merge' => \my $merge,
#'catchall' => \my $catchall,
'require-footer' => \my $require_footer,
'perl' => \my $perl,
'preserve|P=s' => \my $preserve,
'module|M=s' => \my $module,
'dump-module|D=s' => \my $dump_module,
'include' => \my $include,
'include-absolute' => \my $include_absolute,
'yaml-version=s' => \my $yaml_version,
'version-directive' => \my $version_directive,
) or usage(1);
usage(0) if $help;
$module ||= 'YAML::PP';
$boolean ||= 'JSON::PP';
$footer ||= 0;
$indent ||= 2;
$yaml_version ||= 1.2;
$dump_module ||= $module;
if ($dump_module eq 'YAML::PP::Ref') {
$dump_module = 'YAML::PP';
}
my @yaml_versions = split m/,/, $yaml_version;
my @schema = ('+');
if ($merge) {
push @schema, 'Merge';
}
if ($perl) {
push @schema, 'Perl';
}
#if ($catchall) {
# push @schema, 'Catchall';
#}
my $preserve_order = 1;
if (defined $preserve) {
$preserve_order = 0;
my @split = split m/,/, $preserve;
$preserve = 0;
for my $split (@split) {
$preserve |= PRESERVE_ORDER if $split eq 'order';
$preserve_order = 1 if $split eq 'order';
$preserve |= PRESERVE_SCALAR_STYLE if $split eq 'scalar';
$preserve |= PRESERVE_FLOW_STYLE if $split eq 'flow';
$preserve |= PRESERVE_ALIAS if $split eq 'alias';
}
}
elsif ($dump_module =~ m/JSON/) {
$preserve = PRESERVE_ORDER;
}
else {
$preserve = 1;
}
$header = 1 unless defined $header;
my ($file) = @ARGV;
my $yaml;
my $decode = 1;
if ($module eq 'YAML::XS') {
$decode = 0;
}
if ($file) {
open my $fh, '<', $file or die "Can not open '$file'";
$yaml = do { local $/; <$fh> };
close $fh;
}
else {
$yaml = do { local $/; <STDIN> };
}
$yaml = decode_utf8($yaml) if $decode;
my %load_modules = (
'YAML::PP' => \&yamlpp,
'YAML::PP::LibYAML' => \&yamlpplibyaml,
'YAML::PP::Ref' => \&yamlppref,
'YAML::XS' => \&yamlxs,
'YAML::Tiny' => \&yamltiny,
'YAML::Syck' => \&yamlsyck,
'YAML' => \&yaml,
);
my %dump_modules = (
'YAML::PP' => \&yamlpp_dump,
'YAML::PP::LibYAML' => \&yamlpplibyaml_dump,
'YAML::XS' => \&yamlxs_dump,
'YAML::Tiny' => \&yamltiny_dump,
'YAML::Syck' => \&yamlsyck_dump,
'YAML' => \&yaml_dump,
'Data::Dumper' => \&data_dumper,
'JSON::PP' => \&json_pp_dump,
'JSON::XS' => \&json_xs_dump,
'Cpanel::JSON::XS' => \&cpanel_json_xs_dump,
);
my $code = $load_modules{ $module } or die "Module '$module' not supported for loading";
my $dump_code = $dump_modules{ $dump_module } or die "Module '$dump_module' not supported for dumping";
my $docs = $code->($yaml, $file);
( run in 0.779 second using v1.01-cache-2.11-cpan-71847e10f99 )