use strict; use warnings; my @data = ( ['app12', 'eth1', 'static', '192.168.0.5', '255.255.255.0', '192.168.0.1'], ['app15', 'eth0', 'dhcp', '', '', ''], ['app15', 'eth1', 'static', '192.168.0.4', '255.255.255.0', '192.168.0.1'], ['app17', 'eth1', 'static', '192.168.0.2', '255.255.255.0', '192.168.0.1'], ); my %hosts; while (my @row = @{shift @data || []}) { push @{$hosts{$row[0]}}, \@row; } for my $host (keys %hosts) { genFile ($host, $hosts{$host}); } sub genFile { my ($host, $rows) = @_; my $fileName = "/tmp/interfaces.$host"; my @ifaces = map {$_->[1]} @$rows; print "--------- $fileName --------------\n"; print <