Если perl говорит, что не может найти файл, он не может найти файл. И проблема - это скорее ваш код. Посмотрите на этот пример.
[email protected]:~/perl$ cat test.pl
#!/usr/bin/env perl
use strict;
use warnings;
use xyz;
[email protected]:~/perl$ cat test2.pl
#!/usr/bin/env perl
use strict;
use warnings;
system('test.pl');
[email protected]:~/perl$ cat test3.pl
#!/usr/bin/env perl
use strict;
use warnings;
system('./test.pl');
Если вы выполняете test2.pl вы получите:
[email protected]:~/perl$ ./test2.pl
Can't exec "test.pl": No such file or directory at ./test2.pl line 4.
Если вы выполняете test3.pl вы получите:
[email protected]:~/perl$ ./test3.pl
Can't locate xyz.pm in @INC (@INC contains: /home/sidburn/perl510/lib/5.10.1/i686-linux /home/sidburn/perl510/lib/5.10.1 /home/sidburn/perl510/lib/site_perl/5.10.1/i686-linux /home/sidburn/perl510/lib/site_perl/5.10.1 .) at ./test.pl line 4.
BEGIN failed--compilation aborted at ./test.pl line 4.
Если вы не обеспечивают относительный или абсолютный путь затем perl найдите команду в переменной среды $ PATH. Если его нет, он не может найти файл.
Вам необходимо указать «./», если оно находится в текущем каталоге. Но обратите внимание, что «текущий каталог» не означает каталог, в котором работает ваш скрипт.
Если вы хотите, чтобы позже, то вы, вероятно, хотите сделать
use FindBin;
с этим вы можете сделать что-то вроде этого:
#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
use File::Spec::Functions;
my $exe = catfile($FindBin::RealBin, 'test.pl');
print $exe, "\n";
system($exe);
если вы хотите проверить, если система возвращается правильно, нужно проверить возвращаемое значение из команды system() или $? позже это значение.
if ($? != 0) {
die "Cannot execute $exe.\n";
}
, если вы хотите, чтобы подавить сообщения из вашей программы, нужно перенаправить STDOUT, STDERR до запуска программы с системой().
Или используйте что-то наподобие IPC::System::Simple Или IPC :: Open3 (в основе).
Программа действительно существует. Проблема в том, что простой не компилируется, но в сообщении говорится что-то еще. – mmccoo
nix это. Я и идиот – mmccoo
@mmc: вы можете удалить недопустимые комментарии: нажмите на красный значок x, который справа от вашего имени и метки времени. – Ether