my %trees = (1 => "@samples[0..2]", ... (another 10 of these) 12 => "@samples[33..35]", ); while ((my $tree, my $samples) = each (%trees) ){ my @patches = split (/ */, $samples); foreach $patch(@patches) { ... do something }