our %df_keys; sub directories_first ($$) { $df_keys{$_[0]} ||= df_key($_[0]); $df_keys{$_[1]} ||= df_key($_[1]); return ( $df_keys{$_[0]} cmp $df_keys{$_[1]} ); } # somewhere else in the galaxy: my @new_array = sort Some::Package::directories_first @old_array;