LINUX.ORG.RU

запуск одного perl-скрипта из другого


0

1

Доброго времени суток. Прошу помочь с моей проблемой.. пытаюсь в одном перл-скрипте получить параметр и передать его в другой.. для теста создал на своей машине два файла, 1.pl и 2.pl

в первом

#!/usr/bin/perl

do «2.pl 123»;

во втором

#!/usr/bin/perl

print «@ARGV[0]\n»;

итог:

yakoot@yakoot:~$ perl 1.pl

yakoot@yakoot:~$ perl 2.pl 123

123

почему через do не передается параметр?

а почему должно? Используй ``.

anonymous ()
Ответ на: комментарий от anonymous

do EXPR Uses the value of EXPR as a filename and executes the contents of the file as a Perl script.

проще говоря ты пытаешься вызвать файл 2.pl\ 123, а такого ясен пень у тебя нет.

anonymous ()
Ответ на: комментарий от Yakoot

perldoc -f do

сам почитай, раз такой умный.

anonymous ()
Ответ на: комментарий от anonymous

использование system крайне нежелательно, дабы передаваемые параметры не пробегали в логах

Yakoot ()
Ответ на: комментарий от Yakoot

ну кодируй их
в чайлде раскодируй
хуле

anonymous ()

Засунуть один скрипт в другой в виде функции нэ?

Hoodoo ★★★★★ ()
Ответ на: комментарий от Hoodoo

первый скрипт будет что-то вроде

use CGI;

my $Q = new CGI;

my $event = $Q->param('event');

...

затем запускать скрипт с название ивента и передать ему строку с остальными параметрами..

Yakoot ()
Ответ на: комментарий от Yakoot

А что не так получается, что-то я с утра пораньше туплю.

Hoodoo ★★★★★ ()
Ответ на: комментарий от Hoodoo

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

Yakoot ()
Ответ на: комментарий от Yakoot

В perldoc расписано, как, я даже учебные делал и они даже запускались.

Hoodoo ★★★★★ ()
Ответ на: комментарий от Hoodoo

попробую.. а можно ли подключая модуль использовать переменную в качестве названия?

Yakoot ()
Ответ на: комментарий от DELIRIUM

через require я пытался, но там нужно указывать имя_пакета::имя_функции() для запуска.. а имя_пакета у меня в переменной, там такое не прокатило.. если б сделать use $module_name, тогда можно было б просто вызвать функцию оттуда..

Yakoot ()
Ответ на: комментарий от DELIRIUM

# Загружает файл, заданный выражением use EXPR;

вроде нашел где-то.. попробую)

всем спасибо)

Yakoot ()
Ответ на: комментарий от DELIRIUM

не, не хочет use работать с переменной.. придется через system или exec вызывать все таки..

Yakoot ()
Ответ на: комментарий от Yakoot
# cat > T.pm
package T;
sub t { shift && print «@_» }
1;
^D
# perl -le '$a = shift; require «$a.pm»; $a->t(@ARGV)' «T» test string
test string
#
arto ★★ ()
Ответ на: комментарий от Yakoot

В первом:
use Module qw(param1 param2);

Во втором:
package Module;
sub import { print @_; }

helios ★★★★★ ()

А головой подумать?

#!/usr/bin/perl

@ARGV = ( "123" );
do "2.pl";
slovazap ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.