Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Аналог PHP-шного virtual()


Автор: Тиньков 14.6.2005, 11:27
В PHP с помощью функции virtual() можно из одного скрипта вызвать выполнение другого, после чего снова вернуться к первому. Возможно ли то же самое реализовать в Perl?
Схематично это выглядит примерно так:

Начало скрипта1
....
Вызов и выполнение скрипта2
....
Конец скрипта1

Автор: korob2001 14.6.2005, 14:29
Код

do "имя файла";

Для наглядности вот пример с двумя файлами. Создай файл hello.pl с таким кодом:
Код

#!/usr/bin/perl -w
use strict;
print "Hello, world!\n";
<>; # ожидаем ввода

теперь рядом создай файл "call_hello.pl" с таким кодом:
Код

#!/usr/bin/perl -w
use strict;

print "Hello from $0 before call hello.pl\n";

do 'hello.pl';

print "Hello from $0 after call hello.pl\n";

Теперь запусти файл call_hello.pl, в результате увидишь примерно такой вывод:

Hello from call_hello.pl before call hello.pl
Hello, world!
здесь программа будет ожидать ввода

Нажми enter, появится ещё одна строка
Hello from call_hello.pl after call hello.pl
Есть ещё несколько способов, но этот на мой взгляд самый актуальный.

Удачи.

Автор: Тиньков 14.6.2005, 15:26
Спасибо!
Но, как я понимаю, do может работать только с рядом лежащими файлами. А если нужно обратиться к скрипту в виде "http://имя_хоста:порт/название_скрипта"?

Автор: korob2001 14.6.2005, 15:43
Все файлы находятся на одном сервере или ты хочешь подгружать их с других хостов???

Автор: Тиньков 14.6.2005, 16:56
Не, они на одном сервере все. Но может понадобиться обращение к модулю сервера (mod_plsql в моём случае), который сгенерит часть результирующей HTML-страницы. Или заранее не будет известен путь к скриптам, а будет определяться настройками сервера (alias /scripts/ "somepath/scripts")

Автор: korob2001 14.6.2005, 17:40
Указывай примерно такой путь:
/home/localhost/cgi-bin/hello.pl
В итоге, программа call_hello.pl будет выглядеть примерно так:
Код

#!/usr/bin/perl -w
use strict;

print qq|Content-type: text/html\n\n|;
print qq|<html><head><title>Test</title></head><body>|;
print qq|<h1>Hello, from $0 before call hello.pl</h1>|;

do "/home/localhost/cgi-bin/hello.pl";

print qq|<h1>Hello, from $0 after call hello.pl</h1>|;
print qq|</body></html>|;

а программа hello.pl, так:
Код

#!/usr/bin/perl -w
print qq|<hr><h1>This text from hello.pl programm</h1>|;
print qq|<b>Hello, world!</b><hr>|;

Удачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)