Perl:Dirhandle,

Perl: Dirhandle,

我正在阅读 how-do-i-read-in-the-contents-of-a-directory and wanted to find out more about doing it without opening and closing directories as shown in @davidprecious' answer. Tried to read up on DirHandle(希望有更多的解释和示例),其他几个地方只是将我重定向到同一个 perldoc 页面。仍然不确定在哪里规定读取路径。

假设我想要 "E:\parent\sub1\sub2\" 的内容并将其放入 $p 之类的字符串变量中,那么在使用 Dirhandle 时我应该在哪里提及 $p?

希望得到一些指导。谢谢

就我个人而言,我认为这太复杂了,您可能想要的是glob:

#!/usr/bin/env perl

use strict;
use warnings;

foreach my $file ( glob "E:\parent\sub1\sub2\*" ) {
   print $file,"\n";
}

尽管注意 - glob 为您提供文件的 路径 ,而不是文件名。这(IMO)通常更有用,因为您可以将结果传递给 open,如果您正在执行 readdir,您将获得一个文件名并需要在其上添加路径。

但是,如果您确实想通过 DirHandle 坚持这样做:

#!/usr/bin/env perl

use strict;
use warnings;
use DirHandle;

my $dir_handle = DirHandle -> new ( "C:\Users\Rolison\" ); 
while ( my $entry = $dir_handle -> read ) {
   print $entry,"\n";
}

不要使用 $p 作为变量名 - 单字符变量名几乎总是不好的风格。

可能值得指出的是,Windows 很乐意使用正斜杠 (/) 作为目录分隔符 - 这避免了所有那些丑陋的双反斜杠。

my $dir_handle = DirHandle->new('E:/parent/sub1/sub2/');
while ( my $entry = $dir_handle->read ) {
  say $entry;
}