Почему я вижу задержку при вызове Perl-программы с помощью system ()? - PullRequest
1 голос
/ 26 августа 2009

Сценарий 1: У меня есть один скрипт-обертка Perl, который использует другой модуль Perl и вызывает функцию в этом модуле.

Сценарий 2: Теперь у меня есть тот же скрипт-обертка, и модуль реализован как скрипт Perl. Здесь вместо использования модуля я просто звоню system("perl anotherscript.pl").

Оба выполняют одну и ту же функцию, но я вижу небольшую задержку во втором сценарии.

Почему это так? Это ожидается или это связано с моим кодом?

Ответы [ 2 ]

10 голосов
/ 26 августа 2009

В первой ситуации у вас есть издержки интерпретатора Perl. Во втором у вас есть издержки двух интерпретаторов Perl. Если вам нужен второй подход, рассмотрите альтернативную и малоиспользуемую версию функции do (см. perldoc -f do):

do './anotherscript.pl'

Если интерпретатор Perl хорошо спроектирован (и, вероятно, так и есть), он, вероятно, будет работать значительно быстрее, чем второй пример, хотя я не знаю, как он будет сравниваться с первым. Если вы хотите эффективность, тест .

РЕДАКТИРОВАТЬ: Если вас не волнует (вероятно, незначительная) разница в производительности между ними, я рекомендую просто использовать модуль . Это сделает ваш код бесконечно более полезным, потому что, хотя скрипт можно повторно использовать только в одном фрагменте, модули можно повторно использовать в любом количестве отдельных фрагментов.

2 голосов
/ 27 августа 2009

Вы можете иметь модуль и скрипт одновременно, создав modulinos .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...