Perl:Dirhandle,

时间:2016-10-17 16:06:23

标签: perl directory readfile

我正在阅读how-do-i-read-in-the-contents-of-a-directory并希望在不打开和关闭目录的情况下找到更多关于这样做的信息,如@davidprecious'回答中所示。试图阅读DirHandle(希望得到更多解释和示例),其他几个地方只是将我重定向到同一个perldoc页面。仍不确定在何处规定阅读路径。

如果我想要“E:\ parent \ sub1 \ sub2 \”的内容并将其放入像$ p这样的字符串变量中,那么在使用Dirhandle时我在哪里提到$ p?

会感激一些指导。感谢。

2 个答案:

答案 0 :(得分:2)

就个人而言,我建议过于复杂,而你可能想要的是glob

#!/usr/bin/env perl

use strict;
use warnings;

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

虽然note-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作为变量名称 - 单个字符变量名称几乎总是坏的样式。

答案 1 :(得分:1)

值得指出的是,Windows非常乐意使用正斜杠(/)作为目录分隔符 - 这样就不必拥有所有那些丑陋的双反斜杠。

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