【发布时间】:2016-05-06 07:20:35
【问题描述】:
我编写了一个我认为应该可以工作的 HTML 标记解析脚本,但我收到了一个找不到文件的错误。也许我有一个高级的时刻,但我被困住了。我在一个名为Test 的目录中拥有要解析的所有*.html 文件,并且我正在从一个名为temp 的文件夹中执行perl 脚本,该文件夹中包含目录Test。确切的错误是:打开 Test/1.html 时出错:没有这样的文件或目录。
代码如下:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use HTTP::Headers;
use HTML::HeadParser;
use Text::CSV;
my $csv1 = Text::CSV->new ( { binary => 1 } ) or die Text::CSV->error_diag();
$csv1->eol ("\n");
my $dfile = 'all_tags.csv';
open my $fh1, ">:encoding(utf8)", "$dfile" or die "Error opening $dfile: $!";
my $dir = 'Test';
find (\&HTML_Files, $dir);
print "directory is";
print $dir;
close $fh1 or die "Error closing $dfile: $!";
exit;
sub HTML_Files {
Parse_HTML_Header($File::Find::name) if /\.html?$/;
}
sub Parse_HTML_Header {
my $ifile = shift;
open(my $fh0, '<', $ifile) or die "Error opening $ifile: $!\n";
my $text = '';
{
$/ = undef;
$text = <$fh0>;
}
close $fh0;
my $h = HTTP::Headers->new;
my $p = HTML::HeadParser->new($h);
$p->parse($text);
for ($h->header_field_names) {
my @values = split ',', $h->header($_);
if (/keywords/i) {
$csv1->print ($fh1, \@values);
} elsif (/description/i) {
$csv1->print ($fh1, \@values);
} elsif (/title/i) {
$csv1->print ($fh1, \@values);
}
}
}
【问题讨论】:
-
你试过使用绝对路径吗?