我想将某些文件的内容保存到新文件中,然后执行以下操作:
use strict;
use warnings;
use HTML::TreeBuilder::XPath;
my ($dir) = @ARGV;
my @files = glob "details/*";
my $filename = 'target.txt';
for my $file (@files) {
my $tree = HTML::TreeBuilder::XPath->new_from_file($file);
my @opacity = $tree->findnodes_as_strings('//div[@class="opacity description"]');
open my $fh, '>>', $filename;
print $fh for @opacity;
}
不幸的是它不起作用。我不明白为什么?
答案 0 :(得分:2)
检查open
的返回值:
open my $fh ">>", $filename or die "Can't open $filename: $!";
当“某些东西不起作用”时,这可以提供宝贵的见解。
print
的语法不明确。使用print
或say
喜欢
print FILEHANDLE LIST
print {EXPR} LIST # EXPR has to produce a filehandle object
print LIST # prints to the `select`ed filehandle, usually STDOUT
print # prints $_ by default
因此,您希望明确指定要打印的内容,并且可能还会在@opacity
中的每个元素后添加换行符。所以要么
print {$fh} "$_\n" for @opacity;
或use feature 'say'
(perl 5.10及更高版本):
say {$fh} $_ for @opacity;