Обновление: Мои предложения ниже не работают . Тем не менее, я собираюсь оставить их в случае, если у кого-то еще есть подобный вопрос. Этот ответ показывает много вещей, которые могут звучать разумно, но не работают.
См. Обсуждение после репоста ОП для кода с использованием $ ENV {PAR_TEMP} , которое решает проблему ОП
ДЛЯ СПРАВКИ
pp docs говорят:
-a, --addfile = FILE | DIR
...
По умолчанию файлы помещаются в / внутри пакета с их оригинальными именами.
Используя system, вы просите cmd.exe
найти файл, и теперь я понимаю, что, вероятно, битва проиграна, если у вас нет отдельного исполняемого файла с именем cpau.exe
. У меня нет времени, чтобы попробовать это прямо сейчас, но вам, возможно, придется сделать fork
и exec
самостоятельно, а не полагаться на system
. Как в:
exec 'CPAU.exe', @args
Предыдущий ответ:
Строка, которую вы передаете system
, не содержит того, что вы думаете:
use strict;
use warnings;
my $x= "..\cpau -dec -file ..\add_rec.job -nowarn -wait";
print $x, "\n";
__END__
C:\Temp> fgh
..►au -dec -file ..dd_rec.job -nowarn -wait
Использовать ( отредактировано после комментария ОП ниже ):
system "..\\cpau -dec -file ../add_rec.job -nowarn -wait";
Я бы также рекомендовал использовать форму списка system
:
system '..\\cpau', qw(-dec -file ../add_rec.job -nowarn -wait);
Кроме того, вам может пригодиться FindBin , если вы хотите указать путь к cpau
относительно каталога текущего скрипта.
Например:
#!/usr/bin/perl
use strict;
use warnings;
use FindBin qw($Bin);
use File::Spec::Functions qw( catfile );
my $program = catfile $Bin, '..', 'cpau';
system $program, qw(-dec -file ../add_rec.job -nowarn -wait);
__END__