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

 最好的冰雪之母_227 发布于 2023-02-13 17:43

最近,我在Perl中为cPanel插件编写了一些脚本,其中尽管大多数代码都在Perl中,但是还有很多system()命令,我用它直接执行shell命令.

我很确定我可以使用Perl模块代替.记住时间紧迫,我认为使用系统命令更容易(及时完成项目).在回顾展中,我认为这是一个糟糕的编程实践.

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

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

system ("mkdir temp");

另外,如果我要使用Perl模块,那么开始时不会涉及安装大量模块吗?

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

    我想到的第二件事是,如果你的原始版本mkdir失败了,在Perl中处理错误很简单,而shelling out运行mkdir命令会使你的程序与错误保持一定距离,处理起来更加尴尬可能出现的许多不同问题.

    还有可维护性和可移植性的问题,即使您不希望在多台计算机上运行程序,也会影响您.一旦你放弃对system命令的控制,你无法控制发生的事情.我本来可以写一个mkdir会删除你的主目录,或者不那么灾难性的,你的程序可能会发现自己在一个mkdir不存在的系统上,或者做了一些稍微不同的事情.

    在特定情况下mkdir,这是一个内置的Perl操作符,是每个Perl安装的一部分.还有许多核心库需要您放入use Module您的程序,但已经安装,无需进一步操作.

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

    2023-02-13 17:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有