2010-08-08 6 views
1

문제가 다음과 같은 출력을 생성하기 위해 펄을 통해 정의 목록을 작성하기위한 올바른 구문을 찾는 데 : 내가 사용에 어떤 문서를 찾을 수 없습니다perl cgi | 정의 목록 구문

<dt>One</dt> 
     <dd><p>Testing 1</p></dd> 
<dt>Two</dt> 
     <dd><p>Testing 2</p></dd> 
<dt>Three</dt> 
     <dd><p>Testing 3</p></dd> 
</dl> 

합니다. 나는 $cgi->dl($cgi->dt([One,Testing1,Two,Testing2,Three,Testing3])));과 다른 변형을 시도했지만 지금까지 운이 없다. Google이나 perldoc 검색은 지금까지 도움이되지 않았습니다.

+0

당신이 엄격한 사용'사용; 경고를 사용한다; 포함 된 코드에 구문 오류가 있습니다. – Ether

+0

오래된 CGI.pm을 사용하지 마십시오. 대신 [Dancer] (http://www.perldancer.org/) 또는 [Mojolicious] (http://mojolicious.org/)와 같은 현대적이고 깨끗한 웹 엔진을 사용하십시오. – dolmen

답변

3
print $cgi->dl(
     $cgi->dt('One'), 
     $cgi->dd(
       $cgi->p('Testing 1') 
     ), 
     $cgi->dt('Two'), 
     $cgi->dd(
       $cgi->p('Testing 2') 
     ), 
     $cgi->dt('Three'), 
     $cgi->dd(
       $cgi->p('Testing 3') 
     )); 

CGI.pm을 사용하여 데이터 구조를 생성하는 대신 실제로 Template-Toolkit으로 전환합니다.

+0

굉장한 감사합니다. Google의 "Perl cgi Definition List"는 내가 찾고있는 것과 거의 거리가 멀었습니다. 좋은 RTFM 링크를 갖고 있지 않습니까? 필자는 Perl에 익숙하지 않은 Template-Toolkit에 대해 많이 모른다. 이미 설치되어 있지 않다면이 시스템이 이미 특정 목적으로 구성되어 있으므로이 프로젝트에서 사용할 수있는 무언가가 될 것이라고 생각하지 않는다. 나는 무언가를 새로운 것에 넣으려는 정전의 위험을 감수하고 싶지 않습니다. – Mose

+0

http://template-toolkit.org/ - 아직 설치되지 않은 경우 Local :: Lib을 설치하면 별도의 라이브러리 경로에 필요한 종속성이 생기므로 다른 어떤 것도 방해하지 않습니다. 시스템에. – Quentin

2

David는 Template::Toolkit을 사용하는 구문과 제안에 대해 정확합니다. 또는 다른 템플릿 모듈.

다음은 스크립트의 DATA 섹션에있는 템플릿에서 페이지를 생성하는 간단한 예입니다.

물론 템플릿 파일을 분리하여 재사용하고 결합 할 때 실제적인 힘이 생깁니다. 여기

#!perl 

use strict; 
use warnings; 

use Template; 

my $page_data = { 
    title => 'DL Demo', 
    data => [ 
     { terms => ['One Term'], 
      data => ['One Definition'], 
     }, 
     { terms => [qw(Many Terms)], 
      data => ['One Definition'], 
     }, 
     { terms => ['One Term'], 
      data => [qw(Many Definitions)], 
     }, 
    ], 
}; 

my $tt = Template->new() or die "Ugh"; 

$tt->process(\*DATA, $page_data); 


__DATA__ 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"> 
<html> 
    <head> 
    <title>[% title %]</title> 
    </head> 
    <body> 
    <div id="header"> 
     <a href="/index.html" class="logo" alt="Home Page"></a> 
     <h1 class="headline">[% title %]</h1> 
    </div> 

    <div id="data"> 
     <dl> 
     [% FOREACH item = data %] 
     [% FOREACH term = item.terms %] <dt> [% term %] </dt> [% END %] 
     [% FOREACH defdata = item.data %] <dd> [% defdata %] </dd> [% END %] 
     [% END %] 
     </dl> 
    </div> 


    </body> 
</html> 

출력입니다 :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"> 
<html> 
    <head> 
    <title>DL Demo</title> 
    </head> 
    <body> 
    <div id="header"> 
     <a href="/index.html" class="logo" alt="Home Page"></a> 
     <h1 class="headline">DL Demo</h1> 
    </div> 

    <div id="data"> 
     <dl> 

     <dt> One Term </dt> 
     <dd> One Definition </dd> 

     <dt> Many </dt> <dt> Terms </dt> 
     <dd> One Definition </dd> 

     <dt> One Term </dt> 
     <dd> Many </dd> <dd> Definitions </dd> 

     </dl> 
    </div> 

    </body> 
</html> 
+0

이것 좀 봐야 겠어, 재미있어 보인다. 나는 내가이 특정 프로젝트에이 경로를 갈 수 있는지에 대한 스크립트를 쓰고 있는데 특정 패키지가 propietary 응용 프로그램을 실행하도록 설치되어 있으므로 이미 존재하는 모듈과 작업하려고하고있다 (나는 그다지 책임지지 않기를 바란다. 뭔가를 깨기 :) 정보 주셔서 감사합니다. – Mose

+0

@mose, CPAN에서 많은 템플릿 모듈 중 하나를 사용하는 것을 진지하게 고려하십시오. 슬림 종속성을 가진 스크립트를 선택하면 스크립트와 스크립트가 사용하는 다른 모듈과 함께 배포하기가 쉽습니다. IIRC, HTML-Template은 (5.8 이후 Perl의 경우) 비 핵심 종속성이 없습니다. 다른 모듈을 사용하여 스크립트 디렉토리에 내려 놓고 갈 준비가되어 있어야합니다. – daotoad

관련 문제