Ошибка при использовании Mason в качестве автономного языка шаблонов

Добрый день,

Я пытаюсь использовать 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]

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


person Gaurav Dadhania    schedule 14.09.2011    source источник
comment
Пожалуйста, добавьте свое собственное решение в качестве ответа, а затем пометьте его как принятое, чтобы все могли сразу увидеть, что эта проблема решена. Спасибо за внимание к решению!   -  person daxelrod    schedule 14.09.2011
comment
Я бы сделал это, но я не мог видеть кнопку «Ответить на ваш вопрос» :/ Может быть, мне нужно немного подождать, или, может быть, какой-то глюк. Сейчас исправлю :)   -  person Gaurav Dadhania    schedule 14.09.2011


Ответы (2)


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

person evil otto    schedule 14.09.2011

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

#!/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
};
person Gaurav Dadhania    schedule 14.09.2011