最近,我用 Perl 为 cPanel 插件编写了一些脚本,其中虽然大部分代码都是用 Perl 编写的,但也有相当多的 system() 命令以及我用来直接执行 shell 命令的命令。
我非常确定我可以使用 Perl 模块来代替。考虑到时间紧迫,我认为使用系统命令更容易(及时完成项目)。回想起来,我认为这是一种糟糕的编程实践。
我的问题是,在使用 Perl 的模块和使用 system() 命令时,是否存在内存方面或其他方面的权衡。例如,使用以下内容会有什么区别:
my $directory = "temp";
mkdir $directory;
and
system ("mkdir temp");
另外,如果我要使用 Perl 模块,那不是需要在一开始就安装很多模块吗?
最明显的经济性是,在第一种情况下,Perl 进程正在创建目录,而在第二种情况下,Perl 正在启动一个新进程,该进程运行一个命令 shell,该命令 shell 解析命令行并运行 shellmkdir
命令创建目录,然后删除子进程。您将创建和删除一个进程并运行 shellevery拨电至system
:没有进程缓存或类似的经济。
我想到的第二件事是,如果你原来的mkdir
失败了,在 Perl 中处理错误很简单,而用 shell 运行mkdir
命令使您的程序远离错误,并且处理可能出现的许多不同问题要尴尬得多。
还有可维护性和可移植性的问题,即使您不希望在不止一台机器上运行您的程序,这也会影响您。一旦你放弃控制权system
命令你无法控制发生的事情。我本来可以写一个mkdir
这将删除您的主目录,或者,更不那么灾难性的是,您的程序可能会发现自己位于一个系统上,其中mkdir
不存在,或者做的事情略有不同。
在特定情况下mkdir
,这是一个内置的 Perl 运算符,是每个 Perl 安装的一部分。还有很多核心库需要你放use Module
在您的程序中,但已经安装,无需进一步操作。
我确信其他人会提出更多的理由来选择 Perl 运算符或模块而不是 shell 命令。一般来说,您应该更愿意将所有内容都保留在语言内。只有少数情况下您have运行第三方程序,它们通常涉及允许您处理专有数据格式的自定义软件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)