Автор Тема: Вопрос по Perl\'у  (Прочитано 2101 раз)

0 Пользователей и 1 Гость просматривают эту тему.

  • Гость
Вопрос по Perl\'у
« : 29 Мая 2002, 08:43:34 »
Есть пpога по обpаботке шаблонов и небольшой шаблон.

------------[ ....hello.html.... ]------------


HELLO







 
   
   
 






------------[ ···•••Конец Файла ]------------


------------[ ....hello.cgi.... ]------------
#!/usr/bin/perl
###############

sub function_hello(){
 print "Hello world !!!
\\n";
 }

sub template(){
 my ($page, $tag) = @_;
 local $/;
 open (DATA , "<$page");
 $page = ;
 close DATA;

 for($i=0;$i<=$#$tag; $i++){
  my $data = $tag->[$i][1];
  $page =~ s/<$tag->[$i][0]>/&$data/gsex;
  }
 return $page;
 }

print "Content-Type: text/html\\n\\n";

$page="hello.html";
$hello=\'hello\';
$string_hello="Hello world !!!
\\n";

my @params = ([$hello, \\&function_hello]);
print &template($page, \\@params);                                              
------------[ ···•••Конец Файла ]------------                                  
                                                                               
Вообщем сабж: Почемy если использовать ссылкy на фyнкцию &function_hello пpи  
выводе на экpан ввеpхy выводит сообщение "Hello world !!!", а в ячейках таблицы
выводит цифpy 1, хотя по идее должно выводить в ячейках таблицы? Если          
использовать ссылкy не на фyнкцию, а на стpокy $string_hello, тогда все        
ноpмально pаботает. Где тyт могyт быть гpабли?

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос по Perl\'у
« Ответ #1 : 29 Мая 2002, 11:25:51 »
Опиши ф-цию function_hello() так:
sub function_hello()
{  return "Hello world !!!
\\n";
}

Если описать её так, как у тебя, то получается возвращает она 1 (результат последней выполненной операции).

  • Гость
Вопрос по Perl\'у
« Ответ #2 : 30 Мая 2002, 09:40:33 »
А можно как-нибудь сделать это, не изменяя функцию. Т.е. чтоб в точке замены выводило не значение функции а результат ее работы?

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос по Perl\'у
« Ответ #3 : 31 Мая 2002, 12:08:27 »
Цитировать
А можно как-нибудь сделать это, не изменяя функцию. Т.е. чтоб в точке замены выводило не значение функции а результат ее работы?

Результатом работы ф-ции в принципе и есть то, что она возвращает.
Никогда не приходилось таким заниматься, но есть небольшая идея. Перед выполнением ф-ции template перенаправить поток, который выводит ф-ция function_hello в STDOUT в какой-нибудь другой поток (можно оформить в какую-нибудь отдельную ф-цию), а потом считывать данные из нового потока и работать уже с ними. Затем восстановить выходной поток function_hello.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28