Win8 Strawberry 5.8.9.5 (32) Wed 09/07/2022 7:13:21 C:\@Work\Perl\monks >perl use strict; use warnings; use Data::Dump qw(dd); # for debug my $j = <<'EOJ'; "device": [{"host_info" : { "engine_id":null , "name": null ,"host_group_info" :{"name":null,"remarks":null , "id" : 0 } }} ] EOJ print ">>\n$j<< \n"; my $dent = ' '; my $n_dent = 0; my %pretty = ( '{' => sub { my $d = $dent x ++$n_dent; return qq{$_[0]\n$d}; }, '}' => sub { my $d = $dent x --$n_dent; return qq{\n$d$_[0]}; }, ',' => sub { my $d = $dent x $n_dent; return qq{$_[0]\n$d}; }, ':' => sub { my $d = $dent x $n_dent; return qq{$_[0] }; }, ); $j =~ s{ \s* ([{},:]) \s* } { $pretty{$1}->($1) }xmsge; print ">>\n$j<< \n"; ^Z >> "device": [{"host_info" : { "engine_id":null , "name": null ,"host_group_info" :{"name":null,"remarks":null , "id" : 0 } }} ] << >> "device": [{ "host_info": { "engine_id": null, "name": null, "host_group_info": { "name": null, "remarks": null, "id": 0 } } }] <<