【问题标题】:Read directory and save contents of files to new file in Perl读取目录并将文件内容保存到 Perl 中的新文件
【发布时间】:2013-01-17 14:59:39
【问题描述】:

我想将一些文件的内容保存到一个新文件中,我执行以下操作:

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; 
}

不幸的是,它不起作用。我不明白为什么?

【问题讨论】:

  • "it will not work" 是描述您的问题的一种非常糟糕的方式。它真的什么也没说。尝试使用Data::Dumper 使用一些调试打印消息,然后在您获得有关问题的更多信息时返回。

标签: perl file parsing


【解决方案1】:
  1. 查看open的返回值:

    open my $fh ">>", $filename or die "Can't open $filename: $!";
    

    这可以在“出现问题”时提供宝贵的见解。

  2. print 的语法不明确。使用printsay 喜欢

    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;
    

【讨论】:

  • 你能告诉我为什么它会去除标签吗?
  • 它只打印元素的文本内容,因为您正在调用findnodes_as_strings,我将其放入your previous question 的解决方案中,因为这是您的正则表达式所做的。如果您解释了您真正想要的是什么,也许是在一个新问题中,那么我们可以为您提供帮助。
  • @Borodin 我只是想做脚本所做的事情,但我想保留所有的 html 标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 2016-07-26
相关资源
最近更新 更多