#!/usr/bin/perl use strict; use warnings; use File::Basename; my @files; while(<>) { chomp; push @files, $_; } sub fcmp { my $res = lc(dirname($a)) cmp lc(dirname($b)); $res = lc(basename($a)) cmp lc(basename($b)) unless $res; return $res; } my @sorted = sort fcmp @files; print "$_\n" for @sorted;