Вы, похоже, запутались в том, как perl пишет в файлы. Ваши open
и close
на дескрипторе MYFILE
будут создавать только пустой файл. system
ничего не делает с этим файлом в perl. (Хотя я не могу сказать, что с этим делает ваш sh-скрипт).
Некоторые указатели:
- Вы используете индексы
@files
вместо элементов, которые
снижает читабельность без причины, так как сами индексы
нигде не используется.
- Вы используете
split
для извлечения имени и расширения файла, а я
Предположим, есть причина для этого. Тем не менее, нет необходимости устанавливать
Ограничить до 2, так как вы используете только один или два
элементы из этого раскола.
- Если у вас есть только один символ (или класс символов, например
\s
),
скобки не нужны. Итак, используйте \s
вместо [\s]
.
- Рекомендуется использовать трех аргумент
open
с
лексическая файловая ручка.
- Захват вывода (в стандартный вывод) выполняется с помощью обратных знаков или qx () .
system
возвращает только возвращаемое значение системного вызова. dunsmoreb
правильно, что вы можете просто перенаправить в оболочке, чтобы создать
файл, но это то, как это делается внутри Perl.
Если бы я догадался, я бы сказал, что вы пытаетесь записать вывод скрипта bash в файл, который вы пытаетесь открыть, и в этом случае вам следует сделать:
my @files = (
"fixedtt.txt '|'",
"delimd2iffpipe.dat '|'"
);
for my $args (@files) {
my ($filename) = split ' ', $args;
$filename =~ s/\./_processed./;
open my $fh, '>', $filename or die $!;
print $fh qx(sh myBashScript.sh $args);
close $fh;
}