#perl #system #diff
#perl #система #diff
Вопрос:
У меня есть система пакетной обработки, которая должна запускать одну и ту же команду оболочки снова и снова.
while (x)
{
if (y)
{
$diff = `diff $f1 $f2`;
...
}
else
{
...
...
Это немного медленно, поэтому мне интересно, есть ли какой-нибудь способ сделать оболочку или программу постоянными (или что-то в этом роде), чтобы у нее не было больших накладных расходов каждый раз.
Обратите внимание, что я не могу рассматривать возможность написания собственной diff
функции, поскольку фактический вывод должен выглядеть так, как будто он был получен из этой программы.
Заранее спасибо!
Ответ №1:
Мне интересно, есть ли какой-нибудь способ сделать оболочку или программу постоянной (или что-то в этом роде), чтобы каждый раз не было больших накладных расходов.
Не совсем. diff
это своего рода одноразовый инструмент; у него нет постоянного режима.
Однако, возможно, вам захочется взглянуть на модуль Text::Diff . Он может генерировать выходные данные в том же формате, diff
что и утилита.
Комментарии:
1. Алгоритм ::Diff выполняет работу для Text::Diff, и он написан на Perl. Это не будет быстрее
2. @ikegami Существует также алгоритм::Diff::Xs
3. @ikegami Если все файлы действительно маленькие, выполнение сравнения в процессе все равно может быть улучшением. Это было бы особенно верно, если OP находится в операционной системе, которая медленно запускает процессы, такие как Windows.