Acme-Data-Dumper-Extensions
view release on metacpan or search on metacpan
lib/Acme/Data/Dumper/Extensions.pm view on Meta::CPAN
use 5.006; # our
use strict;
use warnings;
package Acme::Data::Dumper::Extensions;
our $VERSION = '0.001000';
# ABSTRACT: Experimental Enhancements to core Data::Dumper
# AUTHORITY
use Data::Dumper ();
use Exporter ();
my $DD_Defaults;
BEGIN {
no warnings 'once';
$DD_Defaults = {
Bless => q[bless],
Deepcopy => 0,
Deparse => 0,
Freezer => q[],
Indent => 2,
Maxdepth => 0,
Pad => q[],
Pair => q[ => ],
Purity => 0,
Quotekeys => 1,
Sortkeys => 0,
Terse => 0,
Toaster => q[],
Useperl => !( grep $_ eq 'Data::Dumper', @DynaLoader::dl_modules ),
Useqq => 0,
Varname => q[VAR],
};
$DD_Defaults->{Sparseseen} = 0 if eval { Data::Dumper->VERSION(2.136) };
$DD_Defaults->{Maxrecurse} = 1000 if eval { Data::Dumper->VERSION(2.153) };
$DD_Defaults->{Trailingcomma} = 0 if eval { Data::Dumper->VERSION(2.160) };
}
sub DD_Defaults {
{ %$DD_Defaults }
}
our $_new_with_defaults = sub {
my ( $self, $user_defaults ) = @_;
my $instance = $self->new( [] );
# Initialise with system defaults
my $instance_defaults = { %{$DD_Defaults} };
# Validate and overwrite user defaults
for my $key ( sort keys %{ $user_defaults || {} } ) {
if ( not exists $DD_Defaults->{$key} ) {
my $guesskey = ucfirst( lc($key) );
my $dym =
exists $DD_Defaults->{$guesskey}
? sprintf q[ (did you mean '%s'?)], $guesskey
: q[];
die sprintf "Unknown feature '%s'%s", $key, $dym;
}
$instance_defaults->{$key} = $user_defaults->{$key};
}
# Set all values
for my $key ( sort keys %{$instance_defaults} ) {
# Properties that aren't methods are bad?
my $sub = $instance->can($key);
die "No setter for feature '$key'" unless $sub;
$instance->$sub( $instance_defaults->{$key} );
}
return $instance;
};
our $_DumpValues = sub {
my ( $self, $values, $names ) = @_;
die "Expected array of values to dump" if not defined $values;
die "Dump values is not an array" unless q[ARRAY] eq ref $values;
$names = [] unless defined $names;
my (@out) = $self->Reset()->Names($names)->Values($values)->Dump;
$self->Reset()->Names( [] )->Values( [] );
return wantarray ? @out : join q[], @out;
};
our @EXPORT_OK = qw( $_new_with_defaults $_DumpValues );
BEGIN { *import = \&Exporter::import; }
1;
=head1 NAME
Acme::Data::Dumper::Extensions - Experimental Enhancements to core Data::Dumper
=head1 SYNOPSIS
use Data::Dumper;
use Acme::Data::Dumper::Extensions qw/$_new_with_defaults/;
local $Data::Dumper::Indent = 5;
my $instance = Data::Dumper->$_new_with_defaults({ }); # Indent is still 2!
$instance = Data::Dumper->$_new_with_defaults({
Indent => 4, # Easier initalizer
});
=head1 DESCRIPTION
This is just a testing ground for things that I'm suggesting for Data::Dumper.
It will likely be terrible because bolting on features after-the-fact its also
pretty ugly.
( run in 0.862 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )