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 не передается параметр?



Последнее исправление: Yakoot (всего исправлений: 2)

Ответ на: комментарий от 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
()
Ответ на: комментарий от Yakoot

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

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

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

use CGI;

my $Q = new CGI;

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

...

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

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

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

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

Ну сделай модуль тогда, раз нехорошо. Ж)

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

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

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

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

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

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

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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.