my @hostRows; while ((my @row = @{shift @data || []}) || @hostRows) { if (@hostRows && (! @row || $row[0] ne $hostRows[0][0])) { genFile ($hostRows[0][0], \@hostRows); @hostRows = (); next if ! @row; } push @hostRows, \@row; }