【发布时间】:2018-10-07 03:27:10
【问题描述】:
递归文件打开而不破坏 perl 中的文件句柄
#!usr/bin/perl
$set=1;
open (MYFILE, 'file1.txt');
$array[$set]=\*MYFILE;
printit ($array[$set]);
sub printit {
($array[$set])=shift;
$fh=<$array[$set]>;
while (<$fh>) {
chomp($fh);
#print data in the file
if($fh=~/\.txt/){
#print $fh;
open (files,"$fh");
$set=$set+1;
printit(*files);
$set=$set-1;
}
}
}
file1.txt -file2.txt,file3.txt #假设 file2.txt 在 file3.txt 之前
文件2.txt-文件4.txt 文件3.txt
我想打开一个 file1.txt 并在 file1 中打印数据,如果我找到 文件中的 file2.txt 打开文件打印数据并递归执行 直到文件中不包含 .txt 文件并返回 (横切一棵树)在我们的例子中 file1->file2->file4->file3->file1 end 程序。我不知道为什么我的程序不起作用。提前致谢*
【问题讨论】:
-
使用严格和警告,它可能会在这里发现几个问题。不要使用裸字(全局)文件句柄或全局变量(它们应该用my 声明),并错误检查您的打开:使用
open my $file, 'file1.txt' or die "Open file1.txt failed: $!";。<$array[$set]>不起作用,因为<>运算符有奇怪的解析规则并将其解释为一个 glob,您可以改为使用readline($array[$set])(它是相同的操作)。 -
请格式化解释,使其可读...?至少开始,我们会提供帮助。我试图编辑,但我无法完全理解它。
-
“不破坏文件句柄”是什么意思?全部保留,打开?请澄清。
-
我确实清理并格式化了您的问题,但我不明白文件列表。请编辑以澄清。 (如果您不喜欢我的编辑,您可以点击问题正下方的“已编辑(时间)”链接撤消它,然后点击之前版本下的“回滚”)
-
始终使用
use strict; use warnings qw( all );!!!
标签: file perl recursion filehandle recursive-datastructures