my @sorted = sort { sorter($a, $b, $offset) } @list; # ... sub sorter { my ($left, $right, $offset) = @_; ... } #### #!/usr/bin/perl use warnings; use strict; use Data::Dumper; my @xx = ( 'dfb|cy|nmju', 'dfb|my|jhiho', 'aaa|zz|gggg' ); my @sorted_xx = sort { sorter($a, $b, 1) } @xx; print Dumper \@xx; print Dumper \@sorted_xx; sub sorter { my ($left, $right, $offset) = @_; my @arr_a = split /\|/, $left; my @arr_b = split /\|/, $right; return $arr_a[$offset] cmp $arr_b[$offset]; }