The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use lib '../lib';
use lib 'lib';
use Solution;
$|++;
Solution->register_tag('dump', 'SolutionX::Tag::Dump');
print Solution::Template->parse(
         <<'END')->render({array => [\%ENV, qw[this that the other], \@INC]});
   array: {% dump array %}
END
{

    package SolutionX::Tag::Dump;
    use strict;
    use warnings;
    use Carp qw[confess];
    BEGIN { our @ISA = qw[Solution::Tag]; }

    sub new {
        my ($class, $args, $tokens) = @_;
        confess 'Missing template' if !defined $args->{'template'};
        $args->{'attrs'} ||= '.';
        my $self = bless {name     => 'dump-' . $args->{'attrs'},
                          tag_name => $args->{'tag_name'},
                          variable => $args->{'attrs'},
                          template => $args->{'template'},
                          parent   => $args->{'parent'},
        }, $class;
        return $self;
    }

    sub render {
        my ($self) = @_;
        my $var = $$self{'variable'};
        $var
            = $var eq '.'  ? $self->template->context->scopes
            : $var eq '.*' ? [$self->template->context->scopes]
            :                $self->template->context->resolve($var);
        if (eval { require Data::Dump }) {
            return Data::Dump::pp($var);
        }
        else {
            require Data::Dumper;
            return Data::Dumper::Dumper($var);
        }
        return '';
    }
}