3 use Scalar::Util qw(blessed);
9 my ($self, $thing) = @_;
10 local our $Indent_Level = 0;
11 $self->_format($thing);
15 my ($self, $thing) = @_;
16 my ($as, $data) = @{blessed($thing) ? $thing->for_deparse : $thing};
17 $self->${\"_format_as_${as}"}($data);
20 sub _format_indented {
23 local $Indent_Level = $Indent_Level + 1;
24 my $unindented = $cb->();
25 (my $indented = $unindented) =~ s/^/${\$self->indent_by}/mg;
29 sub _format_as_string {
30 my ($self, $val) = @_;
31 # TODO: multiline handling
32 if ($val =~ /^\w+$/) {
39 sub _format_as_symbol { $_[1] }
41 sub _format_as_maybe_bareword {
42 my ($self, $maybe_bareword) = @_;
43 # should stringify if required
44 return $maybe_bareword;
47 sub _format_as_number { $_[1] }
49 sub _format_as_boolean { $_[1] ? 'true' : 'false' }
51 sub _format_as_unset { 'unset' }
53 sub _format_as_array {
54 my ($self, $members) = @_;
55 join ' ', '{[', (map $self->_format($_), @$members), ']}';
59 my ($self, $members) = @_;
62 $self->_format_as_maybe_bareword($_),
63 $self->_format($members->{$_}),
64 ), sort keys %$members
68 sub _format_as_statement {
69 my ($self, $parts) = @_;
70 join ' ', map $self->_format($_), @$parts;
73 sub _format_as_value_path {
74 my ($self, $parts) = @_;
75 join '.', map $self->_format_as_maybe_bareword($_), @$parts;
79 my ($self, $members) = @_;
81 map $self->_format_indented($self->curry::_format($_)), @$members
85 sub _format_as_pairs {
86 my ($self, $members) = @_;
88 map $self->_format_indented(sub {
89 $self->_format_as_maybe_bareword($_->[0])
90 .' '.$self->_format($_->[1])
95 sub _format_as_block {
96 my ($self, $members) = @_;
98 map $self->_format_indented($self->curry::_format($_)), @$members