gpt4 book ai didi

perl - 使用 Perl 模块与使用 system() 调用

转载 作者:行者123 更新时间:2023-12-04 23:02:20 24 4
gpt4 key购买 nike

最近,我用 Perl 为一个 cPanel 插件编写了一些脚本,虽然大部分代码都在 Perl 中,但也有相当多的 system() 命令以及我用来直接执行 shell 命令的。

我很确定我可以使用 Perl 模块。记住时间紧迫,我认为使用系统命令更容易(及时完成项目)。回想起来,我认为这是一种糟糕的编程习惯。

我的问题是,在使用 Perl 的模块和使用 system() 命令时,是否有任何权衡,内存方面或其他方面。例如,使用有什么区别:

my $directory = "temp";
mkdir $directory;


system ("mkdir temp");

另外,如果我要使用 Perl 模块,那不是一开始就安装大量模块吗?

最佳答案

最明显的经济是,在第一种情况下,您的 Perl 进程正在创建目录,而在第二种情况下,Perl 正在启动一个新进程,该进程运行一个命令 shell,它解析命令行并运行 shell mkdir。命令创建目录,然后删除子进程。您将创建和删除一个进程并为每次调用 system 运行 shell。 : 没有进程缓存或类似的经济。

想到的第二件事是,如果您原来的 mkdir失败,在 Perl 中处理错误很简单,而运行 mkdir命令使您的程序远离错误,并且处理可能出现的许多不同问题要尴尬得多。

还有可维护性和可移植性的问题,即使您不希望在多台机器上运行程序,这也会影响您。一旦你放弃控制到 system命令你无法控制发生的事情。我本可以写一个 mkdir这将删除您的主目录,或者更不严重的是,您的程序可能会发现自己位于 mkdir 的系统上。不存在,或者做了一些稍微不同的事情。

mkdir 的特殊情况下,这是一个内置的 Perl 运算符,是每个 Perl 安装的一部分。还有很多核心库需要你放use Module在您的程序中,但已安装,无需进一步操作。

我相信其他人会想出更多理由来选择 Perl 运算符或模块而不是 shell 命令。一般来说,您应该更愿意将所有内容保留在语言中。只有少数情况下您必须运行第三方程序,它们通常涉及允许您对专有数据格式进行操作的自定义软件。

关于perl - 使用 Perl 模块与使用 system() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20299279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com