2012-02-22 2 views
0

in-style configs를 구문 분석하는 데 사용할 수있는 Config::InifilesConfig::Simple과 같은 모듈이 있다는 것을 알고 있습니다.Config :: General을 사용하여 INI 스타일 구성 파일을 구문 분석하는 방법?

그러나 Config::General에도 .ini 파일의 형식을 이해하도록 구성 할 수 있는지 궁금합니다.

ini 파일에 키 - 값 쌍만있는 경우 Config::General이 제대로 작동하지만 주석과 섹션 헤더를 이해할 수 없습니다.

나는 같은 INI 파일을 구문 분석 시도 :

; Config format 
; [CONFIG_NAME] 
; key1 = val1 
; key2 = val2 
; key3 = val3 

[cat] 
name = tom 
likes = jerry 

[mouse] 
name = jerry 
likes = cheese 

하지만 Config::General의 출력은 다음과 같습니다 올바르게 구문 분석 Config::General을 알 수있는 방법이

$VAR1 = { 
      '[mouse]' => '', 
      'name' => [ 
         'tom', 
         'jerry' 
        ], 
      '[cat]' => '', 
      'likes' => [ 
         'jerry', 
         'cheese' 
        ], 
      ';' => [ 
        'Config format', 
        '[CONFIG_NAME]', 
        'key1 = val1', 
        'key2 = val2', 
        'key3 = val3' 
       ] 
     }; 

있습니까? 아니면 쓸데없는 운동인데 Config::Inifiles으로 전환해야합니까?

+1

"올바르게"는 무엇입니까? [docs] (http://search.cpan.org/perldoc/Config::General#COMMENTS)는 이러한 유형의 주석이 지원되지 않는다고 말합니다. 예, Config :: IniFiles에서는 대체 주석 문자를 지정할 수 있습니다 " – obmib

+0

안녕하세요 @ obmib, 내 모듈은 내 사양에 따라 구성 파일을 구문 분석해야 함을 의미합니다. 필자는 문서를 살펴보고 변경할 수없는 구성의 구조에 대한 특정 규칙의 적용이 있음을 확인했습니다. 나는 여러 가지 형식을 인식하는 [Config :: Any] (http://search.cpan.org/~bricas/Config-Any-0.23/lib/Config/Any.pm)를 사용하고 있으므로 현재 내 문제가 해결됩니다. – Unos

+0

답변을 답변으로 게시하여 답변을 찾을 수 없으십니까? 감사. –

답변

1

대답은 No입니다. Config :: General을 사용하여 ini 파일을 구문 분석 할 수 없습니다. 이 문서에서 Config :: General은 특정 규칙 집합만을 따르는 파일 구문 분석을 지원하며 다른 형식을 읽도록 구성 할 수는 없다는 것을 알았습니다.

그래서 Apache 스타일의 설정이나 키 - 값 쌍만있는 rcfile을 읽고 싶다면 Config:General이 당신을위한 모듈입니다. 그러나 ini 파일을 읽으려면 Config::Inifiles으로 가십시오. 마찬가지로 XML::Simple은 XML 파일을 구문 분석하는 데 도움이됩니다.

내가 풀려고했던 주된 문제는 다음과 같습니다. 필자의 펄 스크립트를 사용하여 데이터베이스 리소스와 상호 작용하고 싶습니다. 구성 파일을 통해 dbname, username, password 등의 데이터베이스 자격 증명을 얻지 만 구성의 형식에 대한 제어권이 없으므로 스타일/언어가 투명해야합니다. 필수 키가 구성에 있습니다.

여기서 작동하는 모듈 두 개를 찾았습니다 : Config::AnyConfig::Auto. 기본적으로 언어 별 Config :: * 모듈에 대한 래퍼입니다. 따라서 config의 구조에 따라 유형을 추측하고 그에 따라 파싱합니다.

개인적으로는 Config :: Auto를 선호합니다. 그 문법은 다소 어색하지만 문제는 모두 해결됩니다!

관련 문제