in reply to Testing for a directory handle
G'day ns550,
If you attempt to use telldir on an invalid directory handle, you'll get a "telldir() attempted on invalid dirhandle" warning (see perldiag). You can promote that warning to an error with FATAL (see the warnings pragma). That error can now be captured and tested.
I created some test files:
$ ls -al pm_1208018_test_dir* pm_1208018_test_dir: total 0 drwxr-xr-x 3 ken staff 102 Jan 30 07:08 . drwxr-xr-x 20 ken staff 680 Jan 30 07:43 .. -rw-r--r-- 1 ken staff 0 Jan 30 07:08 pm_1208018_test_file pm_1208018_test_dir_closed: total 0 drwxr-xr-x 2 ken staff 68 Jan 30 07:40 . drwxr-xr-x 20 ken staff 680 Jan 30 07:43 .. pm_1208018_test_dir_empty: total 0 drwxr-xr-x 2 ken staff 68 Jan 30 07:29 . drwxr-xr-x 20 ken staff 680 Jan 30 07:43 ..
I used a standard alias of mine:
$ alias perle alias perle='perl -Mstrict -Mwarnings -Mautodie=:all -E'
I started with a simple, one-liner test. I then added more and more tests: the result wrapped around four lines. Here it is; expanded for ease of viewing. I've also annotated the output in situ.
$ perle ' open my $fh, "<", "pm_1208018_test_dir/pm_1208018_test_file"; opendir(my $dh, "pm_1208018_test_dir"); opendir(my $eh, "pm_1208018_test_dir_empty"); opendir(my $ch, "pm_1208018_test_dir_closed"); closedir $ch; my $nh = "42"; my $uh; my %h = (fh => $fh, dh => $dh, nh => $nh, eh => $eh, uh => $uh, ch + => $ch); for (keys %h) { use warnings FATAL => "io"; eval { my $x = telldir $h{$_}; say "$_ is a dirhandle"; 1 } or say "$_ is not a dirhandle" } ' fh is not a dirhandle # fh = filehandle nh is not a dirhandle # nh = not a handle (just the number 42) eh is a dirhandle # eh = dirhandle to "pm_1208018_test_dir_empty +" dh is a dirhandle # dh = dirhandle to "pm_1208018_test_dir" ch is not a dirhandle # ch = closed handle uh is not a dirhandle # uh = undefined handle (declared but uninitia +lised)
[Note that "pm_1208018_test_dir_empty" isn't technically empty. On *nix machines it shows the "." and ".." entries. I'm not sure how that works on MSWin. I've left it in as a potential edge case.]
— Ken
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Testing for a directory handle
by syphilis (Archbishop) on Jan 30, 2018 at 01:10 UTC | |
by kcott (Archbishop) on Jan 30, 2018 at 03:48 UTC | |
|
Re^2: Testing for a directory handle
by afoken (Chancellor) on Jan 30, 2018 at 23:09 UTC | |
by kcott (Archbishop) on Jan 31, 2018 at 02:27 UTC | |
|
Re^2: Testing for a directory handle
by ns550 (Novice) on Jan 29, 2018 at 23:38 UTC | |
by kcott (Archbishop) on Jan 30, 2018 at 03:41 UTC |