我正在尝试获取大量PDF文件(300.000)中的总页数。我编写的脚本可以正常运行,但是出现“内存不足”错误。在TaskManager中,我看到内存使用量逐渐增长。
File :: Find的标准行为是什么?有没有人有另一种方法?
#!/usr/bin/perl
use File::Find;
use PDF::API2;
$totalpages = 0;
sub pagesPDF {
return unless -f;
my $fullpath = $File::Find::name;
my $pdf = PDF::API2->open($fullpath);
my $pages = $pdf->pages;
$totalpages += $pages;
}
find (\&pagesPDF, "G:/MYDIR/1");
print "Total pages of pdf pages = $totalpages\n";
答案 0 :(得分:1)
你可以试试这个,它可能会有所帮助:
sub pagesPDF {
return unless -f;
my $fullpath = $File::Find::name;
my $pdf = PDF::API2->open($fullpath);
my $pages = $pdf->pages;
$totalpages += $pages;
undef $pdf;
}
或者你可以采用不同的方法:
sub pagesPDF {
return unless -f;
my $fullpath = $File::Find::name;
my $pages = `/usr/bin/pdfinfo $fullpath | grep 'Pages:'| cut -f2- -d":"`;
$pages =~ s!\D+!!gis;
$totalpages += $pages;
}
答案 1 :(得分:1)
显然这里的文档有点奇怪。
$pdf->end()
似乎没有按照规定销毁文件,而是要妥善销毁物品,从而关闭文件。