Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么用system()调用Perl程序时会出现延迟?_Perl - Fatal编程技术网

为什么用system()调用Perl程序时会出现延迟?

为什么用system()调用Perl程序时会出现延迟?,perl,Perl,情景1: 我有一个包装器Perl脚本,它使用另一个Perl模块并调用该模块中的函数 情景2: 现在我有了相同的包装器脚本,该模块作为Perl脚本实现。在这里,我不使用模块,而是简单地调用系统(“perlanotherscript.pl”) 两者都有相同的功能,但我在第二个场景中看到了一点延迟 为什么会这样?这是预期的还是与我的代码有关?在第一种情况下,您有Perl解释器的开销。在第二个示例中,您有两个Perl解释器的开销。如果您想使用第二种方法,请考虑一个替代的和很少使用的版本: Do/函数(参

情景1: 我有一个包装器Perl脚本,它使用另一个Perl模块并调用该模块中的函数

情景2: 现在我有了相同的包装器脚本,该模块作为Perl脚本实现。在这里,我不使用模块,而是简单地调用
系统(“perlanotherscript.pl”)

两者都有相同的功能,但我在第二个场景中看到了一点延迟


为什么会这样?这是预期的还是与我的代码有关?

在第一种情况下,您有Perl解释器的开销。在第二个示例中,您有两个Perl解释器的开销。如果您想使用第二种方法,请考虑一个替代的和很少使用的版本:<代码> Do/<代码>函数(参见):

如果Perl解释器设计得很好(很可能是这样),那么它的运行速度可能会比第二个示例快得多,尽管我不知道它与第一个示例相比会如何。如果你想要效率,基准测试


编辑:如果您不关心两者之间的性能差异(可能微不足道),我建议您只使用一个模块。它将使您的代码更加有用,因为虽然脚本只能在一个片段中重复使用,但模块可以在任意多个单独的片段中重复使用。

在第一种情况下,您有Perl解释器的开销。在第二个示例中,您有两个Perl解释器的开销。如果您想使用第二种方法,请考虑一个替代的和很少使用的版本:<代码> Do/<代码>函数(参见):

如果Perl解释器设计得很好(很可能是这样),那么它的运行速度可能会比第二个示例快得多,尽管我不知道它与第一个示例相比会如何。如果你想要效率,基准测试


编辑:如果您不关心两者之间的性能差异(可能微不足道),我建议您只使用一个模块。它将使您的代码更加有用,因为虽然脚本只能在一个片段中重复使用,但模块可以在任意多个单独的片段中重复使用。

通过创建,您可以同时拥有模块和脚本。

通过创建,您可以同时拥有模块和脚本。

创建另一个进程(系统()电话)相当昂贵。在第一个场景中,你做一次,在第二个场景中做两次(对吗?)。您是否在循环中调用system()?我在这里使用的是任何循环。。我只调用了一次..我的意思是“在第一个场景中,您只执行一次,在第二个场景中执行两次”是,您首先为包装器脚本创建一个进程(例如,从shell),然后通过调用system()创建第二个进程。创建另一个进程(system()调用)非常昂贵。在第一个场景中,你做一次,在第二个场景中做两次(对吗?)。您是否在循环中调用system()?我在这里使用的是任何循环。。我只调用了一次..我的意思是“在第一个场景中,您执行一次,在第二个场景中执行两次”是,您首先为包装器脚本创建一个进程(例如,从shell),然后通过调用system()创建第二个进程。使用module和do'/path/to/file'通常做不同的事情。我只是想说清楚@derobert——我想他已经知道了,因为他有使用每种方法的工作程序。但肯定的是,他们做的事情完全不同。我不知道“做”除了“边做边做”之外还能做什么。。谢谢你指出这一点:)@Anandan——我也有好一阵子没有这样做。Perl的文档,无论是在线的还是通过
perldoc
程序的,都非常优秀。使用模块和do'/path/to/file'通常做不同的事情。我只是想说清楚@derobert——我想他已经知道了,因为他有使用每种方法的工作程序。但肯定的是,他们做的事情完全不同。我不知道“做”除了“边做边做”之外还能做什么。。谢谢你指出这一点:)@Anandan——我也有好一阵子没有这样做。Perl的文档,无论是在线的还是通过
perldoc
程序的,都非常优秀。
do './anotherscript.pl'