2011-05-04 49 views
2

我有一個龐大的Perl腳本(1500+行),大約需要8個小時才能運行。如何避免重新處理已經在我的Perl腳本中處理過的輸入?

它從HTML生成SQL,然後導入到網站。基本上,它將整個論壇反向工程化爲一個新的(我有權限)。

腳本從頭開始,每次解析年齡未發生變化的HTML,然後將其作爲哈希數組存儲在內存中,直到解析完所有HTML爲止,生成SQL。

我希望它將上次的結果預加載到內存中,然後只處理更改,但怎麼做呢?

回答

1
+0

看起來像一個不錯的選擇,因爲它可以直接存儲到文件 – Craig 2011-05-04 13:52:35

5

那麼你可以使用YAML,JSON,Data::Dumper甚至Storable來轉儲/恢復任意複雜度的perl數據結構。 (好吧,Storable是一種二進制格式,人類無法閱讀並且兼容性選項有限,但有時它很好)。

您還可以使用perl -d:DProf ./myscript.pl ; dprofpp找出真正的弱點。 (不要這樣做8小時 - dprofpp將永遠持續)。

+0

YAML和JSON :: XS不是默認安裝的一部分,所以對我來說這不是好的選擇,因爲腳本需要易於移植。 – Craig 2011-05-04 13:51:15

+0

探查器的+1,我不知道。 – Craig 2011-05-04 13:51:51

+1

[Devel :: NYTProf](http://p3rl.org/Devel::NYTProf)是優秀的分析器。 – daxim 2011-05-05 06:44:57

1

很大程度上取決於你正在做這件事的確切方式。但是,如果您以HTML文件粒度進行操作,那麼最簡單的方法就是保留一個文件表以及上次處理它們的時間。然後,在處理文件時,檢查處理給定文件之前最後處理的時間是否早於文件的修改時間。

您可以用多種方式保存表格:例如,請參閱DB_File

+0

有用,我想我會將文件路徑和時間戳存儲在另一個散列數組中,而不是使用DB_File。然後我可以使用Storable將它推到光盤上。 – Craig 2011-05-04 14:04:06