gpt4 book ai didi

perl - 无法遵循 Perl 中的 opendir 语法

转载 作者:行者123 更新时间:2023-12-01 23:15:23 25 4
gpt4 key购买 nike

我不是 Perl 用户,所以我只知道最基本的语法,但我从同事那里继承了一些脚本,用于我试图弄清楚的数据分析管道。

具体来说,我无法理解他的 perl 脚本如何使用以下内容定位适当的输入/输出目录:

opendir DIR, "." or die

我看到 opendir 的使用方式是沿着

opendir DIR, </yourpath> or die

我无法在脚本中找到任何内容来指示正在访问的目录名称,那么“.”是什么?语法在做什么?我想也许它只是表示打开当前目录,但那大概是

opendir DIR, './' or die

无论如何,程序在没有访问所需文件的情况下终止,所以我猜这是有问题的行。

最佳答案

看到.就是当前的working-directory , 这里有一些有趣的事实

  • 这不是程序文件所在的目录。为了最好的使用$FindBin::RealBin

  • 当前工作目录可以在程序运行期间改变,由 chdir或使用的库。如果程序是从另一个程序或 cron 启动的,它可能与预期不同。简而言之,在程序运行的任何时候都不应该假设它是什么

  • 在许多编程语言中用字符串 . 表示它并不是一个完整的语言特性,而是一种额外的便利,一种礼貌;那真的是操作系统/文件系统的事情。在编程语言中,它是不完整和不一致的,并且可能无法在人们期望的时候使用。 (示例:虽然我可以使用 . 打开文件,但我无法用它获取当前目录,因此为了以后保存它,我希望能够做到这一点。)

    我使用一个库,比如 Cwd::cwdPath::Tiny::cwd , 将完整路径工作目录存储在变量中。 (在 Path::Tiny 中还有其他方法可以使用它)

  • 以防万一:opendir + readdir 组合返回文件的裸名,没有路径;因此,当从当前目录以外的目录查询时,那些不是实际文件。 补救措施:将工作目录更改为正在读取的目录,或者将路径添加到 readdir 返回的每个文件名之前,以便文件名引用现有文件


如果程序在(工作目录)a_dir 中并且它在 ../other_dir 上执行 opendir code>,然后 readdir 返回 file.txt——没有这样的文件(在当前工作目录 a_dir 中)。程序所在的实际文件是 ../other_dir/file.txt

请注意,..,对于父目录,也与 . 一起定义了

关于perl - 无法遵循 Perl 中的 opendir 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69005939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com