The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"вставка html файла в стандартный вывод в Perl"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"вставка html файла в стандартный вывод в Perl"  
Сообщение от astter on 12-Сен-07, 18:22 
Конструкция вида:

open (FILE, "myhtml.html");

$myvar1= 123;
$myvar2= 456;
$myvar3= ...;

@f=<FILE>;

print "@d";

выведет html-файл из perl, но если в этом html файле встретится $myvar1 и другие переменные то подстановки не произойдет, так и будет напечатано "$myvar1" вместо "123".

Как в данном случае в Perl можно сделать, чтобы вместо переменных выводились значения?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "вставка html файла в стандартный вывод в Perl"  
Сообщение от RebelX (ok) on 12-Сен-07, 18:56 
Если кол-во переменных и их имена заранее известны, то воспользоваться поиском и заменой в строке.

Еще можно унифицировать имена используемых переменных и менять их в строке на их значения с помощью регулярных выражений и подстановок.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "вставка html файла в стандартный вывод в Perl"  
Сообщение от andy email(??) on 13-Сен-07, 04:55 
>Как в данном случае в Perl можно сделать, чтобы вместо переменных выводились
>значения?

как правильно было сказано выше, необходимо с помощью регулярных выражений менять название переменной на ее значение (модификатор "e"). Навроде такого:

[admin@comm perl]$ cat ./html_var_subst
#!/usr/bin/perl
use strict;
use warnings;
use vars qw( оG %VARS );
sub main;

оG = (
  html_file => 'html_var_subst.html'
);

%VARS = (
  title    => 'this is title',
  announce => 'another text'
);

main;

sub main {
  if( open( F, '<', $CFG{html_file} ) ) {
    while( <F> ) {
      s|\${([a-zA-Z_]+[a-zA-Z0-9_]*)}| exists $VARS{$1} ? $VARS{$1} : "<span class=\"error\">unknown var [$1]</span>" |gie;
      print;
    }
    close( F );
  } else {
    die "Can not open [$CFG{html_file}], $!\n";
  }
}
[admin@comm perl]$ cat ./html_var_subst.html
<html>
<head>
<title>${title}</title>
</head>
<body>
<h1>${title}</h1>
<p>${announce}</p>
<p>unknown: ${unknown}</p>
</body>
</html>


Кстати, читать файл в массив в этом случае не совсем удачная идея. Гораздо лучше читать файл построчно, попутно обрабатывая и печатая строки

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "вставка html файла в стандартный вывод в Perl"  
Сообщение от astter on 13-Сен-07, 16:47 
Спасибо всем за помощь.

Действительно, видимо правильно будет или 1)создавать перечень переменных или 2)унифицировать имена чтобы регексп захватывал их все.

Еще нашел модуль CGI::Embedder, вроде бы позволяет использовать в html-файле синтаксис со вставкой переменных вида <? ...> как в PHP:

NAME
CGI::Embedder - Module for HTML embedding in your Perl programs.
----------------------------------------------------------------

SYNOPSIS
  #!/usr/local/bin/perl -w
  use CGI::Embedder;
  ...
  CGI::Embedder::ExpandFile("tmpl.htm");  # where tmpl.htm is:
  <h1>Hello</h1>
  <?for(my $i=10; $i<20; $i++) {?>
    Hello, world N$i!
    $i * $i = <?=$i*$i?>

  <?}?>

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "вставка html файла в стандартный вывод в Perl"  
Сообщение от cat (??) on 14-Сен-07, 12:34 
>[оверквотинг удален]
> @f=<FILE>;
>
> print "@d";
>
>выведет html-файл из perl, но если в этом html файле встретится $myvar1
>и другие переменные то подстановки не произойдет, так и будет напечатано
>"$myvar1" вместо "123".
>
>Как в данном случае в Perl можно сделать, чтобы вместо переменных выводились
>значения?

perldoc HTML::Template

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "вставка html файла в стандартный вывод в Perl"  
Сообщение от angra (ok) on 21-Сен-07, 16:50 
Самый простой способ использовать HTML::Template или HTML::Template::Pro. Если по каким-либо причинам хочется обойтись без этого - используйте eval, например так:
$cat t.htm
<html>
<head>
<title>$title</title>
</head>
</html>

$perl -e 'open FH,"t.htm";undef $/;$s=<FH>;$title="asdf";$s1="\$s2=\"$s\";";eval $s1; print "$s\n$s1\n$s2\n"'

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру