Как я могу избежать повторной обработки ввода, который уже был обработан в моем скрипте Perl? - PullRequest
2 голосов
/ 04 мая 2011

У меня есть огромный Perl-скрипт (более 1500 строк), который занимает около 8 часов.

Он генерирует SQL из HTML, который затем импортируется на веб-сайт.По сути, это реверс-инжиниринг всего форума в новый (у меня есть разрешение).

Сценарий запускается с самого начала каждый раз, когда выполняется синтаксический анализ HTML, который не менялся годами, а затем сохраняется в памяти как массивыхеширует, пока весь HTML не был проанализирован, SQL генерируется.

Я бы хотел, чтобы он предварительно загружал результат из прошлого раза в память, а затем только обрабатывал изменения, но как это можно сделать?

Ответы [ 3 ]

5 голосов
/ 04 мая 2011

Ну, вы можете использовать YAML , JSON , Data :: Dumper или даже Storable для выгрузки / восстановления структур данных Perlпроизвольная сложность.

(Ну, Storable - это двоичный формат, не читаемый человеком и с ограниченными возможностями совместимости, но иногда это хорошо).

Вы также можете использовать perl -d:DProf ./myscript.pl ; dprofpp, чтобы узнать реальныйслабые места.(Не делайте этого с 8-часовой версией - dprofpp будет длиться вечно).

1 голос
/ 04 мая 2011

Многое зависит от того, как именно вы это делаете.Однако, если вы работаете с гранулярностью HTML-файла, то простым способом будет сохранить таблицу файлов и время их последней обработки.Затем, когда вы просматриваете файлы, проверьте, не является ли время последней обработки более ранним, чем время изменения файла, прежде чем обрабатывать данный файл.

Вы можете сохранить таблицу различными способами: см., Например,, DB_File .

1 голос
/ 04 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...