in reply to Re^5: Duplicates in Directories
in thread Duplicates in Directories

I'm not sure to understand what you mean

Nowhere did the OP mention glob. Given the task of populating an array with all the filenames in a directory i would first pick readdir over glob. Im pretty sure readdir returns the files in the order in which they are stored in the directory.

Replies are listed 'Best First'.
Re^7: Duplicates in Directories
by Laurent_R (Canon) on Oct 09, 2017 at 21:21 UTC
    Thank you for your answer. Well, I very much prefer to use glob (rather than readdir) when I can for a number of reasons, the main one being that it gives you the relative path (making coding easier), another one that it takes only one code line instead of two (or even three if you close the dir handle), and finally that it removes some special directories. And we have no idea on how the OP is retrieving the files in the relevant directory.

    I am not sure what "the files in the order in which they are stored in the directory" really means; as as I can say, the files are not stored in any specific order on disk (they may even be scattered on non continuous blocks), it is the file system (FAT, ext2, ext3, NTFS, etc.) which may give some sort of order to the collection of files. So the question is really: how does the file system returns the entries for a given directory?

    Finally, using readdir still gives me the file in ASCIIbetical order (or, at least, in a pseudo-alphabetical order which is perfectly suitable for the proposal made by AnoMonk):

    $ perl -E 'opendir $d, "."; say $_ for readdir $d;' . .. , ---------------------------------------------------------------------- +-------------- .bashrc .bashrc~ .bash_history .bash_profile .cpan .emacs.d .inputrc .joe_state .lesshst .minttyrc .perldb_t .profile .ssh 1000 1095341.pl 172.20.98.3.txt 2000 500 8188eu-v7-20150914.tar.gz a.exe a.pl abdou.pl Acme add2.pl add_2.pl age_switch.pl [many lines omitted for brevity] xml.pl xml_mac.pl xxxA.txt xxxH.txt xxxL.txt X_oper.pl

      Finally, using readdir still gives me the file in ASCIIbetical order

      use warnings; use strict; opendir my $d, "."; print "$_ \n" for readdir $d;
      Result
      . .. 1185398.pl 1188996.pl 1153280.serconf proj1.txt zipstest uri.pl 1189013.pl hash.pm days.pl 1185438.pl 1189178.pl hosts.pl 1189178a.pl 1185708.pl quake_pp.txt 1186032.pl dumper.txt 1186308.pl 1189211.pl 1186323.pl 1189235.pl 1186469.pl lookup.pl 1186032-b.pl 1189346.pl poj.pl 1189381.pl sqlite-tables.pl wmi-dbi.pl 1186518.pl 1189436.pl ... omitted for brevity

      it gives you the relative path

      readdir also gives you the relative path, relative to the directory you open

      So the question is really: how does the file system returns the entries for a given directory?

      Yes that is true. Some filesystems use a btree like structure, some filesystems place a new file into the next unused slot in the directory block, where a slot that had contained a deleted file is as eligible before the last block, some filesystems use the next slot that has room to contain the long file name. What order does the DIR command arrange files if no sort order is specified? About the order that readdir() returns entries in

      I prefer readdir because it doesnt do things "behind the scenes" such as skip files that begin with a dot. The expression glob(".* *") matches all files in the current working directory.