while (){ @data = split(/\~/,$_); # will have around 30 elems # $data[23] will have user preference column selection # user enters 3,3-7,4,9-13 etc anything he desires $data[23] =~ s/-/\.\./; # convert - to .. perl syntax # 23rd elements contains the range entered by user # for ex: 2,3-8,11-20 # i need to extract only above range ignoring rest push(@range,eval $array[23]); # i expanded here @range = map { --$_ } @range; # decrementing since array starts from 0 # @range = grep { !$seen{$_}++ } @range; # remove duplicates in case user enters like 2,1-10 etc # @range = sort { $a <=> $b } @range; # Sort thee indices in ascending order like 1,2,3,4,5,6 and so on my @finalarray = @data[@range];