2010-05-25 2 views
4

큰 XML 파일이 있는데, XML::Simple으로 구문 분석하는 데 40 초 이상 걸립니다.실행 사이에 재사용을 위해 큰 Perl 객체를 유지하려면 어떻게해야합니까?

다음 파싱 된 개체를 검색하고 전체 파일을 다시 구문 분석 할 수 없도록 결과 구문 분석 된 개체를 캐시 할 수 있기를 바랍니다.

Data::Dumper을 사용했지만 디스크 파일에서 출력을 저장하고 검색하는 방법에 대한 설명서가 부족합니다. 다른 클래스는 내가 검토 한 결과 (예 : Cache::Cache 많은 작은 물체가 아닌 하나의 큰 하나의 저장을 위해 설계 나타납니다.

가 사람이 용으로 설계된 모듈?

편집을 추천 할 수 있습니다. XML 파일이

.. ftp://ftp.rfc-editor.org/in-notes/rfc-index.xml가, 내가 후속 실행을 가속화하기위한 Storable으로 갔다 XML 파서가 매우 중요한 코드 변경이 필요했을 것이다 변경 내 맥 프로 벤치 마크 수치에

StorableXML::Simple으로 전체 파일을 읽을 수는 있습니다

 s/iter test1 test2 
test1 47.8  -- -100% 
test2 0.148 32185%  -- 
+3

XML :: Simple에서 고통을 줄 때, 더 이상 사용하지 말고 더 나은 솔루션으로 이동할 때입니다. 이 모듈은 간단하게 말하면서 만들어졌습니다. –

+0

유일한 고통은 속도였습니다 - XML ​​:: Simple의 계획 Perl DSC 출력은 제 요구 사항에 완벽합니다. – Alnitak

답변

11

Data :: Dumper는 실제로 매우 간단합니다.

# Write 
open(FILE, ">your_filename") || die "Can not open: $!"; 
print FILE Data::Dumper->Dump([$HashRef],["HashRef"]); 
close(FILE) || die "Error closing file: $!"; 

# Read 
my $HashRef; 
$HashRef = eval { do "your_filename" }; 
    # Might need "no strict;" before and "use strict;" after "do" 
die "Error reading: [email protected]" if [email protected]; 
# Now $HashRef is what it was before writing 

또 다른 좋은 옵션은 Storable을 사용하고 있습니다 : 개체가 hashref $HashRef 경우. POD에서 : 다양한 옵션에 아주 좋은 가이드 (뿐만 아니라 데이터의 더 나은 예 : 덤퍼 사용)에 대한

use Storable; 
store \%table, 'file'; 
$hashref = retrieve('file'); 

Chapter 14 "Persistence" of brian d foy's "Mastering Perl" book

+0

'Data :: Dumper' 예제에 감사드립니다.'$ var = eval {do "file"}'비트가 누락되었습니다. 그러나 '저장 가능함'이 더 좋습니다. 정확히 내가 찾던 내용입니다. – Alnitak

+0

흥미롭게도 Google 도서 링크를 보면 Dumper 자료에 필요한 페이지가 표시되지 않기로 결정했습니다. –

+0

@brian - 이상하게 보입니다. 나는 완벽하게 잘 볼 수 있습니다 ... 4 페이지 아래로 링크가 열립니다. – DVK

5

Storable를 참조하십시오. 그것은 게으른 대답입니다. (Prefer nstore over store.)

데이터 덤핑의 반대는 eval입니다.

좋은 대답은 : 구문 분석 속도를 높이기 위해 XML::Twig 또는 XML::LibXML과 같은 무거운 처리에 적합한 XML 모듈을 사용하는 것을 배우려는 것이므로이 캐싱 원숭이 코드가 필요하지 않습니다.

+1

(1) Storable 또는 이와 동등한 것을 사용하는 것을 배우는 것은 관계없이 훌륭한 도구입니다. (2) XML 처리 작업을 일부 수행하는 경우 캐시 된 원시 데이터 구조의 절약이 상당한 리소스가 될 수 있습니다. – DVK

+0

⑴ 나는이 이유 때문에 정확하게 내 대답에서 생략하지 않았다. ☺ ⑵ 추측, 우리는 유스 케이스를 모른다. – daxim

+0

파일에서 덤핑의 반대는'do'입니다. – ysth

관련 문제