首页 > 解决方案 > 当我尝试使用命令 opendir 时,为什么下面的 Perl 代码显示“在连接 (.) 或字符串中使用未初始化的值”

问题描述

我正在编写代码来显示目录中的所有文件和子文件夹。是opendir并且readdir仅用于显示文件还是也可以显示子目录?

以下是我正在使用的代码,我不知道我应该尝试什么。

#!/apps/perl/5.8.9/bin/perl

use strict;
use warnings;

opendir DIR , "/home/x0280511/" || die;
while (readdir DIR) {
    print "$_\n";
}

我收到以下错误消息

在连接 (.) 或字符串中使用未初始化的值

上面的错误信息到底是什么意思?

标签: perl

解决方案


barereaddir仅在 Perl 5.12+ 上的 while 循环表达式中有效。如果您使用的是早期版本的 Perl,则需要使用不同的语法来强制标量上下文:

while (my $ent = readdir DIR) {
  print "$ent\n";
}

或者您可以readdir在列表上下文中使用,只需注意它会在显示第一个条目之前查询整个目录内容:

foreach my $ent (readdir DIR) {
  print "$ent\n";
}

希望有帮助!


推荐阅读