Ошибка использования Mason в качестве автономного языка шаблонов - PullRequest
2 голосов
/ 14 сентября 2011

G'day,

Я пытаюсь использовать HTML :: Mason 1.35 в качестве автономного языка шаблонов для генерации писем. Рассмотрим следующий тестовый скрипт:

#!/usr/bin/perl
use strict;
use warnings;

use HTML::Mason::Compiler;
use HTML::Mason;
use Data::Dumper;

my $view_info = {
    name => 'John Smith',
    dob => '10-10-2010'
};

my $output;

my $mason_compiler = HTML::Mason::Compiler->new(
    allow_globals => [ qw( $view_info ) ]
);

my $mason_interpreter = HTML::Mason::Interp->new(
    compiler => $mason_compiler,
    comp_root => '/tmp/',
    out_method => \$output
);

$mason_interpreter->exec('/something.m');

print Dumper {
    output => $output
};

Когда я пытаюсь запустить его, я получаю следующую ошибку:

The following parameter was passed in the call to 
HTML::Mason::Compiler::compile but was not listed in the
validation options: comp_class

Stack:
  [/usr/share/perl5/HTML/Mason/Compiler.pm:191]
  [/usr/share/perl5/HTML/Mason/ComponentSource.pm:76]
  [/usr/share/perl5/HTML/Mason/Interp.pm:452]
  [/usr/share/perl5/HTML/Mason/Request.pm:239]
  [/usr/share/perl5/HTML/Mason/Request.pm:205]
  [/usr/share/perl5/Class/Container.pm:275]
  [/usr/share/perl5/Class/Container.pm:353]
  [/usr/share/perl5/HTML/Mason/Interp.pm:348]
  [/usr/share/perl5/HTML/Mason/Interp.pm:342]
  [./masontest.pl:26]

Не используется компилятор, а просто интерпретация компонента работает нормально, однако добавление компилятора приводит к этой ошибке. Любая подсказка, что я здесь делаю не так?

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Другое решение, но не объяснение: используйте HTML::Mason::Compiler::ToObject в качестве компилятора вместо HTML::Mason::Compiler.Я не помню, почему в данный момент, но это то, что у меня есть в моем рабочем коде.

1 голос
/ 14 сентября 2011

A (возможное) решение:

#!/usr/bin/perl
use strict;
use warnings;

use HTML::Mason::Compiler;
use HTML::Mason;
use Data::Dumper;

my $view_info = {
    name => 'John Smith',
    dob => '10-10-2010'
};

my $output;

my $mason_interpreter = HTML::Mason::Interp->new(
    allow_globals => [ qw( $view_info ) ],
    comp_root => '/tmp/',
    out_method => \$output
);

$mason_interpreter->set_global('$view_info', $view_info);
$mason_interpreter->exec('/something.m');

print Dumper {
    output => $output
};
...