#! perl -slw use strict; use Data::Dumper; my %images; $images{$1}{$2} = undef while =~ m[copy_(\d+)_frag_(\d+)_id]; print Dumper \%images; for my $copy ( 1 .. 9 ) { for my $frag ( 1 .. 9 ) { $images{$copy}{$frag} = int rand 100000 if exists $images{$copy} and exists $images{$copy}{$frag}; } } print Dumper \%images; __DATA__ copy_1_frag_1_id copy_1_frag_2_id copy_1_frag_3_id copy_1_frag_4_id copy_1_frag_5_id copy_1_frag_6_id copy_1_frag_7_id copy_1_frag_8_id copy_1_frag_9_id copy_2_frag_3_id copy_2_frag_5_id copy_2_frag_7_id copy_2_frag_9_id