Data-Printer
view release on metacpan or search on metacpan
lib/Data/Printer/Filter/SCALAR.pm view on Meta::CPAN
package Data::Printer::Filter::SCALAR;
use strict;
use warnings;
use Data::Printer::Filter;
use Scalar::Util;
use constant HAS_BOOLEAN => $] ge '5.036000';
filter 'SCALAR' => \&parse;
filter 'LVALUE' => sub {
my ($scalar_ref, $ddp) = @_;
my $string = parse($scalar_ref, $ddp);
if ($ddp->show_lvalue) {
$string .= $ddp->maybe_colorize(' (LVALUE)', 'lvalue');
}
return $string;
};
sub parse {
my ($scalar_ref, $ddp) = @_;
my $ret;
my $value = ref $scalar_ref ? $$scalar_ref : $scalar_ref;
if (not defined $value) {
$ret = $ddp->maybe_colorize('undef', 'undef');
}
elsif (HAS_BOOLEAN && _is_bool($value)) {
if ($value) {
$ret = $ddp->maybe_colorize('true', 'true');
} else {
$ret = $ddp->maybe_colorize('false', 'false');
}
}
elsif ( $ddp->show_dualvar ne 'off' ) {
my $numified;
$numified = do { no warnings 'numeric'; 0+ $value } if defined $value;
if ( $numified ) {
if ( "$numified" eq $value
|| (
# lax mode allows decimal zeroes
$ddp->show_dualvar eq 'lax'
&& ((index("$numified",'.') != -1 && $value =~ /\A\s*${numified}[0]*\s*\z/)
|| (index("$numified",'.') == -1 && $value =~ /\A\s*$numified(?:\.[0]*)?\s*\z/))
)
) {
$value =~ s/\A\s+//;
$value =~ s/\s+\z//;
$ret = $ddp->maybe_colorize($value, 'number');
}
else {
$ret = Data::Printer::Common::_process_string( $ddp, "$value", 'string' );
$ret = _quoteme($ddp, $ret);
$ret .= ' (dualvar: ' . $ddp->maybe_colorize( $numified, 'number' ) . ')';
}
}
elsif ( !$numified && _is_number($value) ) {
$ret = $ddp->maybe_colorize($value, 'number');
}
else {
$ret = Data::Printer::Common::_process_string($ddp, $value, 'string');
$ret = _quoteme($ddp, $ret);
}
}
elsif (_is_number($value)) {
$ret = $ddp->maybe_colorize($value, 'number');
}
( run in 2.776 seconds using v1.01-cache-2.11-cpan-a49fcb8fa48 )