【问题标题】:Perl: Dirhandle,Perl: Dirhandle,
【发布时间】:2017-02-26 17:00:42
【问题描述】:

我正在阅读how-do-i-read-in-the-contents-of-a-directory 并想了解更多关于在不打开和关闭目录的情况下执行此操作的信息,如@davidprecious 的回答所示。试图阅读DirHandle(希望有更多解释和示例)和其他几个地方只是将我重定向到同一个 perldoc 页面。仍然不确定在哪里规定阅读路径。

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

希望得到一些指导。谢谢。

【问题讨论】:

    标签: perl directory readfile


    【解决方案1】:

    我个人认为这太复杂了,你可能想要的是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 作为变量名——单字符变量名几乎总是不好的风格。

    【讨论】:

    • glob 的问题是你可以在非 Windows 机器上执行 glob(quotemeta($dir) . '/*'),但我似乎记得在 Windows 机器上失败了,因为那里的转义规则真的很奇怪(允许 @ 987654332@).
    • 谢谢@Sobrique。也感谢这个例子。看到这一点很有帮助。我所指的同一个问题也显示 glob 并突出显示不允许路径名中的空格(尽管在这里对我来说不是问题)。另外,感谢您对单字符变量名称的评论 - 它最初是 $pth ,我将其截断为 $p 。今后将不再这样做。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢@DaveCross。有助于了解斜杠可互换性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2015-08-16
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多