Я хочу зберегти вміст деяких файлів у новий файл, і я роблю наступне:
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;
}
На жаль, це не спрацює. І я не розумію, чому?
Відповіді:
2 для відповіді № 1Перевірте повернене значення
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;