встраивание html, созданного методом perl, в место, где он вызывается - PullRequest
0 голосов
/ 25 августа 2010

Я очень плохо знаком с Perl-кодированием, я вызываю метод, который снова вызывает другой метод, а затем генерирует HTML-код.Мне нужно встроить html-код в мой текущий код, чтобы добавить его к текущему html-коду.

Я вызываю такой метод

my $ test = $ frek-> xyz();где xyz сгенерировал html.

теперь мне нужно встроить $ test в мой html, но не найти выход.Пожалуйста, помогите

1 Ответ

3 голосов
/ 25 августа 2010

Не совсем понятно, что вы хотите, но, возможно, это

что ответит на ваш вопрос.Что именно вы пытаетесь сделать?Можете привести конкретный пример?

Приложение

Прочитав еще один ваш комментарий, я думаю, что получил то, что вы пытаетесь достичь.

Давайте представим, что у нас есть класс 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...