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