$delim = 'A -3 C -4 B'; $array = ['A -4 A','A -1 C','C -4 D','D -4 B','B -3 C','C -2 B','B -1 E']; + * + * + * + * + * + * # Note that in $array, starting from # second element $array->[1] until $array->[-1], # the first alphabet ( asterisks *) is actually # a repeat of the last alphabet ( plus +) # from the previous element. #### my $delim = 'A -3 C -4 B'; my $delim_reg = ['A -3 C','C -4 B']; #### my $delim_reg = ['A -3 C','C -4 B']; \__i__/ \__j__/ --> sub-regions my $array = ['A -4 A','A -1 C','C -4 D','D -4 B','B -3 C', 'C -2 B','B -1 E']; |\_____i_______/ \__j__/|-> Inst 1 |____________________________________________________| |\_i__/ \_____j________/ |-------> Instance 2 |_________________________| ... till |\_____i_______/ \_______________j__________________/ |--> Inst 6 |______________________________________________________| #### my $VAR = [ [['A -4 A', 'A -1 C'], ['C -2 B']], # Ins1 [['A -4 A', 'A -1 C'], ['C -4 D','D -4 B']], # Ins2 [['A -4 A', 'A -1 C'], ['C -4 D','D -4 B','B -4 C','C -2 B']], # Ins3 [['A -4 A', 'A -1 C', 'C -4 D','D -4 B','B -4 C'],['C -2 B']], # Ins4 [['A -1 C'], ['C -4 D', 'D -4 B']], # Ins5 [['A -1 C'], ['C -4 D', 'D -4 B','B -3 C','C -2 B']], # Ins6 ] #### use Data::Dumper; my $delim = 'A -3 C -4 B'; my $array = ['A -4 A','A -1 C','C -4 D','D -4 B','B -3 C','C -2 B','B -1 E']; get_delim_region($delim,$array); sub get_delim_region{ my ($delim,$array) = @_; my $delim_reg = decomp_str($delim); # I'm really stuck from here..... my @instances; OUT: foreach my $delim_rg ( @{$delim_reg} ){ my @delimreg; my $st1 = (split(" ",$delim_rg))[0]; my $st2 = (split(" ",$delim_rg))[2]; IN: foreach my $i ( 0 .. @{$array}-1 ){ my $tr1 = (split(" ",$array->[$i]))[0]; my $tr2 = (split(" ",$array->[$i]))[2]; if($st1 eq $tr1){ push @delimreg,$array->[$i]; } elsif($st2 eq $tr2){ push @delimreg,$array->[$i]; next OUT; } push @instances, [ @delimreg ]; } } print Dumper \@instances; return ; } sub decomp_str{ # This subroutine decompose a string into sub-regions i.e # from: $delim = 'A -3 C -4 B'; # into: $delim_reg = ['A -3 C','C -4 B']; # Credit Roy Johnson - fastest [$_[0] =~ /(?=([a-z]\s*(?:\S+\s*){2}))\S+\s*/gi ] }