$ perl -le' my @fields = ( [ name1 => { start => 0, len=> 10 } ], [ name2 => { start => 8, len=> 3 } ], [ name3 => { start => 11, len=> 14 } ], ); my $format = join q[ ], map sprintf( q[x%d a%d X%d], @{ $_->[ 1 ] }{ qw[start len] }, $_->[ 1 ]{ start } + $_->[ 1 ]{ len } ), @fields; print $format; ' x0 a10 X10 x8 a3 X11 x11 a14 X25