2011-05-04 5 views
2

나는 약 8 시간이 걸리는 거대한 Perl 스크립트 (1500+ 회선)를 가지고있다.Perl 스크립트에서 이미 처리 된 입력을 다시 처리하지 않으려면 어떻게해야합니까?

HTML에서 SQL을 생성 한 다음 웹 사이트로 가져옵니다. 기본적으로 전체 포럼을 새로운 포럼으로 리버스 엔지니어링합니다 (권한이 있습니다).

스크립트는 HTML에서 구문 분석을 수행 할 때마다 처음부터 실행되며 모든 HTML이 구문 분석 될 때까지 메모리에 해시 배열로 저장되어 SQL이 생성됩니다.

지난 번 결과를 메모리에 미리로드 한 다음 변경 사항 만 처리하고 싶습니다. 어떻게 처리 할 수 ​​있습니까?

답변

1
+0

파일에 직접 저장할 수 있기 때문에 좋은 선택 같습니다 – Craig

5

YAML, JSON, Data::Dumper 또는 심지어 Storable을 사용하여 perl의 임의의 복잡성을 가진 데이터 구조를 덤프/복원 할 수 있습니다.

(글쎄, 저장 가능은 이진 형식이므로 사람이 읽을 수없고 호환성 옵션이 제한되어 있지만 때로는 좋을 수도 있습니다.)

perl -d:DProf ./myscript.pl ; dprofpp을 사용하여 실제 약한 부분을 찾을 수도 있습니다. (8 시간 버전으로하지 마십시오. dprofpp은 영원히 지속됩니다).

+0

YAML 및 JSON :: XS는 기본 설치의 일부가 아니므로 스크립트를 쉽게 이식 할 수 있어야하므로 나에게 적합하지 않습니다. – Craig

+0

+1에 대한 프로파일 러, 나는 그것에 대해 몰랐습니다. – Craig

+1

[Devel :: NYTProf] (http://p3rl.org/Devel::NYTProf)는 우수한 프로파일 러입니다. – daxim

1

많은 것들이이 작업을 수행하는 정확한 방법에 달려 있습니다. 그러나 HTML 파일 세분성에서 작업하는 경우 간단한 방법은 파일 테이블과 마지막으로 처리 한 시간을 유지하는 것입니다. 그런 다음 파일을 검토 할 때 지정된 파일을 처리하기 전에 마지막으로 처리 된 시간이 파일 수정 시간보다 빠른지 확인하십시오.

다양한 방법으로 테이블을 유지할 수 있습니다. 예를 들어 DB_File을 참조하십시오.

+0

유용 합니다만, DB_File을 사용하는 대신 해시 배열에 파일 경로와 타임 스탬프를 저장합니다. 그런 다음 나머지 부분과 함께 Storable을 사용하여 디스크로 푸시 할 수 있습니다. – Craig

관련 문제