3 use Scalar::Util qw(blessed);
10 my ($self, $thing) = @_;
11 local our $Indent_Level = 0;
12 $self->_format($thing);
16 my ($self, $thing) = @_;
17 my ($as, $data) = @{blessed($thing) ? $thing->for_deparse : $thing};
18 $self->${\"_format_as_${as}"}($data);
21 sub _format_indented {
24 local $Indent_Level = $Indent_Level + 1;
25 my $unindented = $cb->();
26 (my $indented = $unindented) =~ s/^/${\$self->indent_by}/mg;
30 sub _format_as_string {
31 my ($self, $val) = @_;
32 # TODO: multiline handling
33 if ($val =~ /^\w+$/) {
40 sub _format_as_symbol { $_[1] }
42 sub _format_as_maybe_bareword {
43 my ($self, $maybe_bareword) = @_;
44 # should stringify if required
45 return $maybe_bareword;
48 sub _format_as_number { $_[1] }
50 sub _format_as_boolean { $_[1] ? 'true' : 'false' }
52 sub _format_as_unset { 'unset' }
54 sub _format_as_array {
55 my ($self, $members) = @_;
56 join ' ', '{[', (map $self->_format($_), @$members), ']}';
60 my ($self, $members) = @_;
63 $self->_format_as_maybe_bareword($_),
64 $self->_format($members->{$_}),
65 ), sort keys %$members
69 sub _format_as_statement {
70 my ($self, $parts) = @_;
71 join ' ', map $self->_format($_), @$parts;
74 sub _format_as_value_path {
75 my ($self, $parts) = @_;
76 join '.', map $self->_format_as_maybe_bareword($_), @$parts;
80 my ($self, $members) = @_;
82 map $self->_format_indented($self->curry::_format($_)), @$members
86 sub _format_as_pairs {
87 my ($self, $members) = @_;
89 map $self->_format_indented(sub {
90 $self->_format_as_maybe_bareword($_->[0])
91 .' '.$self->_format($_->[1])
96 sub _format_as_block {
97 my ($self, $members) = @_;
99 map $self->_format_indented($self->curry::_format($_)), @$members