#! /usr/bin/perl use strict; use warnings; use Text::Template; use List::MoreUtils qw( natatime ); my %cmd_data = ( ... ); our $max_sf_cols = 5; my $template = Text::Template->new( TYPE => 'FILEHANDLE', SOURCE => \*DATA ) or die "Couldn't construct template: $Text::Template::ERROR"; for my $cmd ( sort keys %cmd_data ) { local our $opcode = $cmd_data{$cmd}{opcode}; my @sf_names; push @sf_names, $_->{subfield_name} for @{ $cmd_data{$cmd}{subfields} }; @sf_names = qw( none ) if not @sf_names; my $it = natatime $max_sf_cols, @sf_names; print $template->fill_in() while local our @sf_cols = $it->(); } __DATA__

{ $OUT .= "" for @sf_cols }
opcode subfield(s)
{ $opcode }$_