use 5.014; # needs /r modifier for s/// (also uses 5.10+ \K) use warnings; use strict; use Data::Dump qw(pp); my $cl = q(execute test_number_1 -tex -tex_args -sub_args +debug_dir=./ -fizz_boff -sub_args +debug_dir=./ -constraint parity_en,random_en -sub_args '"' ruck=1 '"' -bar -xyzzy -bar- -constraint dual_en -sub_args -cd -sub_args 2596.slow -fizz_boff- -sub_args test -seed 1 -tex_args- -opt 1 -foo -x y -zz 42 -foo- -tag 2 -last 1); print qq{>$cl< \n\n}; my $in = ' '; # indentation for each level of nesting my $rin = qr{ \Q$in\E }xms; # regex for 1 indent level my $clump = qr{ (?: -sub_args \s+ \S+ | \S) .*? (?= \s+ - | \Z) }xms; my $answer; $answer .= s/^-/$in-/gmr . qq{\n} for $cl =~ m{ $clump }xmsg; # ok pp $answer; print "\n\n"; 1 while $answer =~ s{ (^ ($rin+) - [^\n]+) \n \K ((?: ^ \2 - [^\n]+ \n)*?) (?= ^ \1 -) } { $3 =~ s{^}{$in}xmsgr }xmsge; print qq{>>>$answer<<< \n\n}; #### c:\@Work\Perl\monks\proxie>perl prettyprint_cl_1.pl >execute test_number_1 -tex -tex_args -sub_args +debug_dir=./ -fizz_boff -sub_args +debug_dir=./ -constraint parity_en,random_en -sub_args '"' ruck=1 '"' -bar -xyzzy -bar- -constraint dual_en -sub_args -cd -sub_args 2596.slow -fizz_boff- -sub_args test -seed 1 -tex_args- -opt 1 -foo -x y -zz 42 -foo- -tag 2 -last 1< "execute test_number_1\n -tex\n -tex_args\n -sub_args +debug_dir=./\n -fizz_boff\n -s ub_args +debug_dir=./\n -constraint parity_en,random_en\n -sub_args '\"' ruck=1 '\"'\n -bar \n -xyzzy\n -bar-\n -constraint dual_en\n -sub_args -cd\n -sub_args 2596.slow\n -f izz_boff-\n -sub_args test\n -seed 1\n -tex_args-\n -opt 1\n -foo\n -x y\n -zz 42\n -foo-\n -tag 2\n -last 1\n" >>>execute test_number_1 -tex -tex_args -sub_args +debug_dir=./ -fizz_boff -sub_args +debug_dir=./ -constraint parity_en,random_en -sub_args '"' ruck=1 '"' -bar -xyzzy -bar- -constraint dual_en -sub_args -cd -sub_args 2596.slow -fizz_boff- -sub_args test -seed 1 -tex_args- -opt 1 -foo -x y -zz 42 -foo- -tag 2 -last 1 <<<