unit sub MAIN($out); my $doc = q:to/EOP/; EOP sub make-item($layer, :$display = $layer, :$use-vit?, :$vit?) { ... } make-item 'outer', upper => 'vitiligo1'; make-item 'spines', use => 'vitiligo1'; make-item 'stripes', upper => 'cuffs', display => 'socks'; make-item 'belly1', upper => 'vitiligo2'; make-item 'belly2', upper => 'vitiligo3'; make-item 'fins1', upper => 'vitiligo4'; make-item 'fins2', use => 'vitiligo4'; make-item 'fins3', use => 'vitiligo4'; make-item 'masks'; make-item 'claws'; make-item 'eyes'; $doc ~= ''; $out.IO.spurt: $doc; sub make-item($layer, :$display = $layer, :$use?, :$upper?) { state $index = 0; my $str = qq[\n]; with $upper { $str ~= qq{ }; } orwith $use { $str ~= qq{ }; } else { $str ~= qq{ }; } $str ~= qq{ }; with $upper { $str ~= qq{ $display #?????? #?????? }; } orwith $use { $str ~= qq{ $layer #?????? }; } else { $str ~= qq{ $layer #?????? }; } $str ~= qq{ }; $index++; $doc ~= $str }