Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Perl (http://www.flasher.ru/forum/forumdisplay.php?f=21)
-   -   подстановка переменных при чтении из файла (http://www.flasher.ru/forum/showthread.php?t=47666)

Timofey 05.08.2003 13:54

подстановка переменных при чтении из файла
 
привет

в разных текстовых файлах храняться куски хмтлки, в зависимости от параметров вывожу тот или иной файл

пример файла

<tr>
<td><a href="#" class="$str">тыры-пыры</a></td>
<td></td>
</tr>
<tr>
<td><a href="#" class="$cel">елы-палы</a></td>
<td></td>
</tr>


т.е. меню, в зависимости в каком разделе сидит юзер у того и меняется класс,чтобы показать активный раздел
переменные $str и т.п. формируются в скрипте,но когда читаю их из фаилй,то они воспринимаются как обычный текст,как заставить их принимать нужные значения?

выводить все в самом скрипте,получается слишком большой код

Armen Khanoyants 05.08.2003 14:17

Код:

<style type='text/css'>
.out:link {font-family: Arial, Helvetica; color: #0066fa; font-weight: normal; TEXT-DECORATION: none;}
.in:link {font-family: Arial, Helvetica; color: #000000; font-weight: normal; TEXT-DECORATION: none;}
</style>
<a href="#" class="<?inrazdel==true?print("all"):print("out");?>">тыры-пыры</a>

попробуй так

wd_andrey 19.09.2003 13:19

если еще надо
 
Код:

my($file,$temp,@code);
$file="_путь к файлу с HTML кодом";
open(FILE,'<$file');
  while(<FILE>){
    $temp=<FILE>;
          if($temp=~/\$str/){
                $temp=~s/\$str/_на значение переменной/;
          }
          ... и т. д.
    push @code,$temp;
  }
close FILE;
$file = join("\n",@code);
#вот эта команда интерпритирует значение переменной как ПЕРЛ код.
eval($file);

:cool: :cool: :cool:

JPEG 13.02.2004 17:45

$html =~ s/([^\\])\$(\w+)/ $1 . ${$2} /ge;

Все конструкции $blabla будут заменятся на переменные из глобальной области видимости. Можно модифицировать, чтоб тока од определённой.

metton 13.02.2004 18:22

Не понял, зачем ты заменяешь переменную вместе с предыдущим символом да ещё между ними зачем-то точку прописываешь?

JPEG 13.02.2004 20:35

Я думаю, что ты уже разобрался, но, на всякий случай, объясню.

s/blabla/blabla()/ge

- это не просто замена, это замена с выполнением второй части. В жтом примере: blabla в переменной заменится на результат выполнения функции &blabla (при чём, на момент подстановки).

А в моём примере если перед "$" стоит обратный слеш "\", замена не происходит.

JPEG 13.02.2004 20:44

Вложений: 1
Глянь мою реализацию "PerlHP" :))))
Типа невинная попытка вдохнуть жизнь в Perl.

Тут я себе ж*пу порвал. Но вроде не глючит.

К Апачу добавляем:

AddType application/x-httpd-perl_html .phtml
Action application/x-httpd-perl_html /cgi-bin/phtml.cgi

а в папку cgi-bin кидаем аттач к посту.

Кому понравится - пишите о глюках.

Пример скрипта:

<HTML>
<!--perl

#любой пёрл-код

while(1){
-->

<br>

<!--perl

}

-->

Если нада свои заголовки:

<!--perlinit print "Content-type: что-угодно"; и скока угодно -->

в любом месте документа.

Если нада инклюдить:

<!--perlinclude main.phtml -->
<!--perlinclude ls -l | -->

В общем просто :)

metton 13.02.2004 22:37

2JPEG
Насчёт кода понял. Это я стормозил малясь. Но экспериментируя с этим кодом нашёл для себя непонятный момент:

my $html = '<b>$foo</b>';
$foo = "bar";
$html =~ s/([^\\])\$(\w+)/ $1 . ${$2} /ge;
print $html;

Так работает. Если же $foo объявлять лексической переменной, ${$2} не даёт её значения. Почему?



А насчёт твоего файла. Это как я понял встраивание кода perl в html? Если да, то скажи мне, наф это нужно? По-моему гораздо эффективней и практичнее когда код отделён от дизайна.

JPEG 19.02.2004 00:17

Нужно это для разнообразия :)

А не работает, очевидно, потому, что лексическая переменная не имеет записи TYPEGLOB.

metton 19.02.2004 16:34

Да, насчёт лексической переменной ты опять (http://www.flasher.ru/forum/showthre...183#post355755) прав ;)


Часовой пояс GMT +4, время: 13:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.