2009-08-26 41 views
1

场景1: 我有一个包装Perl脚本,它使用另一个Perl模块并调用该模块中的一个函数。为什么我在使用system()调用Perl程序时看到延迟?

场景2: 现在我有相同的包装脚本,模块实现为Perl脚本。在这里,我不是简单地使用模块,而是调用system("perl anotherscript.pl")

两者都执行相同的功能,但在第二种情况下我看到一点点延迟。

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

+1

创建另一个进程(system()调用)相当昂贵。在第一种情况下,你做了一次,在第二种情况下(右?)。你可能在循环中调用system()吗? – Inshallah

+0

我在这里使用任何循环..我只叫了一次.. – Anandan

+0

我的意思是“在第一个场景中,你做了一次,在第二个两次”是你首先创建一个包装脚本的过程(例如从shell),然后通过调用system()创建第二个进程。 – Inshallah

回答

10

在第一种情况下,您有Perl解释器的开销。在第二个,你有两个 perl解释器的开销。如果你想第二个办法,考虑do功能的替代和很少使用的版本(见perldoc -f do):

do './anotherscript.pl' 

如果Perl解释器在设计的都好(很可能是),这将可能运行速度明显快于第二个例子,尽管我不知道它与第一个例子相比如何。如果你想效率,基准。编辑:如果你不关心两者之间的(可能不重要的)性能差异,我建议你只需使用一个模块。编辑:如果你不关心两者之间的性能差异(我可以推荐你使用模块。它将使你的代码变得更加有用,因为虽然脚本只能被一次性重复使用,但模块可以根据需要随意重复使用。

+0

使用模块和做'/路径/到/文件'一般做不同的事情。只是想说清楚! – derobert

+1

感谢您的建议..然后我会去perl模块本身.. – Anandan

+0

@derobert - 我想他知道,因为他已经在使用每种方法的工作程序。但绝对是,他们做了很不同的事情。 –

2

通过创建modulinos,可以同时创建模块和脚本。

相关问题