#!/usr/bin/perl use strict; use warnings; my @data = map {chomp; [ split '/' ] } ; @data = map { join '/', @$_ } sort my_sort @data; print $_,$/ for @data; sub my_sort { my $i = $_[0] || 0; if ( defined $a->[$i] && defined $b->[$i] ) { if ( my $result = $a->[$i] <=> $b->[$i] ) { return $result; } ++$_[0]; goto &my_sort; } return defined $a->[$i] ? 1 : -1; } __DATA__ 0/1/2/3 0 0/4/5/6 0/4 0/1 0/1/2 0/4/5 0/10/111/145 0/10/111 0/10 #### #@data = map { join '/', @$_ } sort my_sort @data; @data = map { join '/', @$_ } sort { my_sort() } @data;