#! 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 #### P:\test>test $VAR1 = { '1' => { '6' => undef, '3' => undef, '7' => undef, '9' => undef, '2' => undef, '8' => undef, '1' => undef, '4' => undef, '5' => undef }, '2' => { '3' => undef, '7' => undef, '9' => undef, '5' => undef } }; $VAR1 = { '1' => { '6' => 88293, '3' => 61117, '7' => 13104, '9' => 29397, '2' => 45159, '8' => 6976, '1' => 17465, '4' => 38931, '5' => 10040 }, '2' => { '3' => 73205, '7' => 8816, '9' => 71615, '5' => 88977 } };