【发布时间】:2011-04-08 15:42:27
【问题描述】:
我正在尝试编写一个脚本来处理某些文件。数据是这样组织的:有一个文件夹(我们称之为 X),我的脚本将放置在其中。在同一个文件夹中,有一个名为“data”的子文件夹。这包含多个具有不同名称的子文件夹,每个子文件夹都包含许多文件(没有其他子文件夹,只有文件)。我需要处理子文件夹中的所有文件(更具体地说,对每个文件运行一个函数),然后合并子文件夹中所有文件的结果,因此对于每个文件夹都有一个结果(无论它包含多少文件)。
问题是,我无法访问这些文件,因此我可以在它们上运行我的函数。我现在拥有的是这样的:
$dirname = "data";
opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n";
while( ($dirname2 = readdir(DIR)) )
{
next if $dirname2 eq ".";
next if $dirname2 eq "..";
opendir ( DIR2, $dirname2 ) || die "Error in opening dir $dirname2\n";
while( ($file = readdir(DIR2)) )
{
next if $file eq ".";
next if $file eq "..";
print( "file:$file\n" );
}
closedir(DIR2);
}
closedir(DIR);
它总是失败并显示消息“打开 dir alex 时出错”。 'alex' 恰好是数据目录中的第一个目录。我的问题是——问题出在哪里?这甚至是如何实现我想要做的正确方法吗?我也担心如果数据文件夹中还有一个文件,我会失败,因为我无法用 opendir 打开它,或者我可以吗?
PS:抱歉,Perl 代码很糟糕——我仍在努力学习这门语言。
谢谢, 彼得
【问题讨论】:
-
die "Error in opening dir $dirname: $!"会给你原因,见perldoc perlvar。更好的是,删除|| die…部分,添加use autodie qw(:all);并让autodie 模块处理/报告错误。