如何避免重新处理已在Perl脚本中处理的输入?

时间:2011-05-04 12:55:56

标签: perl performance

我有一个庞大的Perl脚本(超过1500行)需要大约8个小时才能运行。

它从HTML生成SQL,然后导入到网站中。基本上它将整个论坛逆向工程化为一个新的论坛(我已获得许可)。

每次解析未经过多年改变的HTML时,脚本从头开始运行,然后将其作为哈希数组存储在内存中,直到解析完所有HTML,生成SQL。

我希望将上次结果预先加载到内存中,然后只处理更改,但是如何做到这一点?

3 个答案:

答案 0 :(得分:5)

您可以使用YAMLJSONData::Dumper甚至Storable转储/恢复perl的任意复杂数据结构。

(好吧,Storable是一种二进制格式,人类无法读取且兼容性选项有限,但有时它很好。)

您还可以使用perl -d:DProf ./myscript.pl ; dprofpp找出真正的弱点。 (不要用8小时版本做到这一点 - dprofpp将永远持续下去)。

答案 1 :(得分:1)

答案 2 :(得分:1)

很大程度上取决于你这样做的确切方式。但是,如果您以HTML文件粒度运行,那么一种简单的方法是保留文件表以及上次处理它们。然后,当您浏览文件时,在处理给定文件之前检查上次处理的时间是否早于文件的修改时间。

您可以通过多种方式保留表:例如,请参阅DB_File