#! /usr/bin/perl # vim:ts=4 sw=4 sts=4 et nu fdc=3: use strict; use warnings; use Data::Dumper; $Data::Dumper::Sortkeys = 1; # data structure: Hash of Arrays # Device => [ list of vlan IDs ] my %vlan = ( device_1 => [ 1..38 ], device_2 => [ 1..48 ], device_3 => [ 1..24 ], ); sub fetch_data { my $hRef = shift; my %data; for my $dev ( keys %$hRef ) { # skip if no vlan IDs left for current device next if 0 == @{ $vlan{$dev} }; # extract next 10 IDs of current device $data{$dev} = [ splice( @{$vlan{$dev}}, 0, 10 ) ]; } return %data; } # take 10 items of each device sub hash: via fetch_data() # process items: print Dumper( \%data ) # redo until all sub hashs are empty while ( my %data = fetch_data( \%vlan ) ) { print Dumper( \%data ); } __END__