Forum Webscript.Ru
Программирование => 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абли?
-
Опиши ф-цию function_hello() так:
sub function_hello()
{ return "Hello world !!!
\\n";
}
Если описать её так, как у тебя, то получается возвращает она 1 (результат последней выполненной операции).
-
А можно как-нибудь сделать это, не изменяя функцию. Т.е. чтоб в точке замены выводило не значение функции а результат ее работы?
-
А можно как-нибудь сделать это, не изменяя функцию. Т.е. чтоб в точке замены выводило не значение функции а результат ее работы?
Результатом работы ф-ции в принципе и есть то, что она возвращает.
Никогда не приходилось таким заниматься, но есть небольшая идея. Перед выполнением ф-ции template перенаправить поток, который выводит ф-ция function_hello в STDOUT в какой-нибудь другой поток (можно оформить в какую-нибудь отдельную ф-цию), а потом считывать данные из нового потока и работать уже с ними. Затем восстановить выходной поток function_hello.