Не совсем понятно, что вы хотите, но, возможно, это
что ответит на ваш вопрос.Что именно вы пытаетесь сделать?Можете привести конкретный пример?
Приложение
Прочитав еще один ваш комментарий, я думаю, что получил то, что вы пытаетесь достичь.
Давайте представим, что у нас есть класс Perl 'MyClass
', который содержит методxyz()
:
package MyClass;
sub new {
my $class = shift;
my $self = { x => shift, y => shift, z => shift };
bless $self, $class;
return $self
}
sub xyz { # <== here we go
my ($self) = @_;
return $self->{x} * $self->{y} * $self->{z}
}
1;
Если ваша Perl-программа (например, cgitest.pl
) работает как простой CGI-скрипт из каталога cgi-bin, она будет выглядеть так:
#!/usr/bin/perl
use strict;
# here we have html included in source
my $html = q{
<html>
<head></head>
<body>
<h1>Test</h1>
<div id='test_results'> #{$test}# </div>
</body>
</html>
};
use MyClass; # lets hope it'll be found
my $frek = new MyClass(10,10,10); # create instance
my $test = $frek->xyz(); # get value
$html =~ s/#{(\$\w+)}#/$1/eeg; # now replace #{$test}# in html by $test
print "Content-type: text/html\n\n"; # output modified html to browser
print $html;
Это заменит маркер #{$var}#
на значение фактического $var
и напечатает полученный html.Обратите внимание на (двойной) /ee
после шаблона замещения.
Но тогда, если ваш веб-сайт Mason site , ваш test.html просто выглядит так:
<h1>Test</h1>
<div id='test_results'> <% $test %> </div>
<!-- Perl initialization code goes below -->
<%init>
use MyClass;
my $frek = new MyClass(10,10,10);
my $test = $frek->xyz();
</%init>
, который можно записать аналогично с помощью %perl
блока кода:
<h1>Test</h1>
<%perl>
use MyClass;
my $frek = new MyClass(10,10,10);
my $test = $frek->xyz();
</%perl>
<div id='test_results'> <% $test %> </div>
, но теперь у вас есть смешанные части html и части Perl, тогда как в приведенном выше примере весь код Perl идет нижеHTML.Если ваш веб-сервер правильно настроен на для HTML :: Mason , он прекрасно справится с любым из них.Mason доступен для Windows, Unix и любых других систем.
С уважением
rbo