【问题标题】:Perl File::Find Undocumented GlobalsPerl 文件::查找未记录的全局变量
【发布时间】:2011-08-01 11:21:03
【问题描述】:

$File::Find 是一种强大的遍历目录树的方法。

我遇到了需要确定(在wanted 函数内)递归搜索开始的顶级目录。 This perldoc 提到 $File::Find::topdir 似乎包含我需要的内容。所以,我正在编写的特定脚本现在可以工作了。

但是,我很好奇是否有更多关于此以及同一段落中提到的其他全局变量的文档:

$File::Find::topdir
$File::Find::topdev
$File::Find::topino
$File::Find::topmode
$File::Find::topnlink
$File::Find::fullname
$File::Find::prune

或者,如果您在自己的脚本编写项目中使用过这些全局变量,你们能否对它发表评论。

【问题讨论】:

  • 我经常使用全名(当收集目录名/文件名以在 find() 调用之外使用时)。我有时用修剪。我不认为我曾经使用过其他人。

标签: perl file directory find


【解决方案1】:

$File::Find::prune 已记录在案,非常有用。这就像 Unix 的 find 命令的 -prune 选项,将其设置为“不要进入该目录”。

File::Find 的 POD 也很好地记录了 fullname

  • 当“follow”或“follow_fast”生效时,还有一个$File::Find::fullname。 .... 有一个变量$File::Find::fullname 保存文件的绝对路径名,所有符号链接都已解析。如果链接是悬空符号链接,则 fullname 将设置为“undef”。

至于其他 - 早在 90 年代初期,在 Perl5 出现其方便的词法变量、对象和闭包之前(以及在 CPAN 之前),perl 随 File::Find 的前身“find.pl”一起提供 - 和因此 File::Find 仍然使用的所有包变量。由于某种原因,“顶级”变量处于记录不充分的状态。

当调用find(\&wanted, @directories_to_search) 时,模块将$File::Find::topdir 设置为@directories_to_search 中的每个目录,因为它通过它们。其他top* 变量与那个“顶级”目录的属性有关。

【讨论】:

    【解决方案2】:

    如果未记录全局变量,则它们不适合公共使用,您最好不要使用它。

    top* 变量似乎是文件的一些常见元数据,由 stats() 系统调用返回。 (设备、inode、模式(即访问权限)、链接数)

    【讨论】:

    • 嗯,它们都有记录,因为@Lex 链接到官方 perl 文档。他们只是记录得很差。
    • @dsolimano - 同意。在非 unix(文件)系统上,其中一些也会有无意义的或默认值,例如 0777 用于恰好位于 FAT32 中的顶级目录,或者我认为。
    • @dsolimano - 也同意。我不完全是 Perl 黑客。我发现这些的原因是因为它们在官方的 perl 文档中。但是,文档确实暗示您可能不应该直接使用它们。然而,这只是暗示,并未明确说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多