Yeah, I appreciate that the removal of . and .. may not be portable to your system - I write mostly on Windows where I work which is why I just shift them off the start of the array.
Are you sure that Windows guarantees that the first two results are "." and ".."? I would not bet a cent on that. If it works, it does so by pure luck.
If you are sure, post a link to the relevant documentation from Microsoft where Microsoft guarantees that the first two results are "." and ".." (in any order), under all circumstances.
I failed to find such a statement in FindFirstFile(), FindNextFile(), and FindFirstFileEx(). Quite the opposite is true for these three functions. Microsoft clearly states that these functions return unsorted data. So if your "solution" ever worked, then only by pure luck. You are writing and propagating bad code.
but you could just add a loop to iterate over the array in the subroutine before returning the list, finding both, and deleting the elements. Wouldn't be too hard
Well, yes, but you would not loop and remove manually. grep can do that within a single line of code:
use strict; use warnings; use autodie qw( :all); opendir my $d,'/where/ever'; my @content=grep { !/^\.{1,2}$/ } readdir $d; closedir $d;
Of course, you don't need a regexp, you could also use two string compares:
use strict; use warnings; use autodie qw( :all); opendir my $d,'/where/ever'; my @content=grep { ($_ ne '.') and ($_ ne '..') } readdir $d; closedir $d;
Alexander
In reply to Re^4: Capturing and then opening multiple files
by afoken
in thread Capturing and then opening multiple files
by Peter Keystrokes
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |