Perl - внутренний файл (создать и выполнить) - PullRequest
1 голос
/ 04 апреля 2010

У меня есть быстрый вопрос о создании файлов с помощью Perl и их выполнении. Я хотел узнать, можно ли сгенерировать файл с помощью perl (мне действительно нужен скрипт .bat), а затем выполнить этот файл внутри программы. Я знаю, что могу создавать файлы, и я использую Perl, однако я хочу сделать это внутри программы. Итак, что я хочу сделать, это на самом деле создать пакетный скрипт внутри программы (на самом деле ни один файл не записывается на диск, все остается в памяти или в программе perl), а затем после завершения записи файла Я хотел бы иметь возможность на самом деле выполнить этот файл, а затем отказаться от файла, который он только что написал. Я в основном пытаюсь создать пакетный сценарий на лету, чтобы я мог просто выводить текстовые файлы из выходных данных сценария, а не создавать пакетный сценарий на диске, а затем выполнять его и удалять пакет файл с диска, когда это будет сделано.

Можно ли это сделать и как мне поступить?

С уважением, Drew

Ответы [ 2 ]

2 голосов
/ 04 апреля 2010

Вам действительно нужен пакетный скрипт? Возможно, все, что вы хотите сделать, может быть сделано непосредственно из Perl или вызвано непосредственно Perl с помощью его команды system.

Если необходим пакетный скрипт, что не так с созданием временного файла для скрипта и последующим его выполнением с system? См. File :: Temp , который даже автоматически удалит временный файл после того, как вы закончите.

Если стратегия виртуальных пакетных файлов неизбежна, вы можете использовать опции /C и, возможно, /S, равные cmd. Примерно так:

use strict;
use warnings;

my @batch_commands = (
    'dir',
    q{echo "Make sure quoting isn't busted"},
    'ipconfig',
);

# Use & or &&, depending on your needs. Run `cmd /?` for details.
my $virtual_bat_file = join " &\n", @batch_commands;

system "cmd /C $virtual_bat_file";

Но это очень неправильно. Должен быть лучший способ достичь любой цели вашего приложения. Кстати, когда вы запустите cmd /?, чтобы узнать о /C, /S и & против &&, вы быстро поймете, насколько ужасно в Land of Batch . Держитесь подальше, если это возможно.

1 голос
/ 04 апреля 2010

открыть файл; создать содержимое; закройте файл; выполнить файл (например, с помощью system ()); удалить файл.

...