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

2023-11-25

最近,我用 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(使用前将#替换为@)

使用 Perl 模块与使用 system() 调用 的相关文章

  • 使用 Cygwin 安装 CPAN GD 模块失败

    我已经尝试解决为什么 CPAN GD 模块无法使用 Cygwin 安装 2 天了 任何帮助深表感谢 谢谢 cpan install GD Going to read home xxxxxxxxxx cpan Metadata Databas
  • 从 php 执行 bash 脚本并立即输出回网页

    我有一组 bash 和 Perl 脚本 开发在 Linux Box 上部署所需的目录结构 可选 从svn导出代码 从这个源构建一个包 这在终端上运行良好 现在 我的客户请求此流程的 Web 界面 例如 某些页面上的 创建新包 按钮将一一调用
  • Perl 程序如何知道在哪里可以找到包含它使用的 Perl 模块的文件?

    如果我的 Perl 程序使用 Perl 模块 它将如何确定在哪里找到包含模块代码的文件 例如 如果程序包含 use MyModule1 Example 1 use This Here MyModule2 Example 2 它会看起来在哪里
  • 如何彻底删除 Perl 中的包?

    如何在 Perl 中彻底删除一个包 这不仅意味着包变量 还意味着 Perl 更新以处理继承更改和其他事情的任何魔术表 这个简单的测试 use warnings use strict use Test LeakTrace use Symbol
  • 如何在 Perl 中循环访问类的所有方法?

    如何在 Perl 中循环访问一个类的所有方法 有没有关于 Perl 内省或反射的好的在线参考 Todd Gardner 使用 Moose 的建议很好 但他选择的示例代码并不是很有帮助 如果你正在检查一个非 Moose 使用类 你会这样做 u
  • Perl regex:如何知道匹配数

    我循环遍历一系列正则表达式并将其与文件中的行进行匹配 如下所示 for my regex regexs ref LINE for rawfile regex do do something here next LINE 有没有办法让我知道我
  • 如何忽略 perl 中的“证书验证失败”错误?

    我想访问一个无法验证证书的网站 我正在使用 WWW Mechanize 获取请求 那么如何忽略这一点并继续连接到该网站呢 use IO Socket SSL qw use WWW Mechanize qw my mech WWW Mecha
  • 如何修复 Math::BigInt 调用的 Math::Pari 中的“`as_number' 不是 Pari 函数名称”?

    在 Perl 5 8 5 上 我看到问题中列出的错误 我正在运行这些版本模块 数学 BigInt 1 89 数学 BigInt FastCalc 0 19 数学 BigInt GMP 1 24 数学 BigInt Pari 1 13 数学
  • 如何使用“子例程引用”作为哈希键

    在 Perl 中 我正在学习如何取消引用 子例程引用 但我似乎无法使用子例程引用作为哈希 键 在下面的示例代码中 我可以创建对子例程 subref 的引用 然后取消引用它以运行子例程 subref 我可以使用引用作为哈希 值 然后轻松取消引
  • robots.txt 允许除少数子目录之外的所有子目录

    我希望我的网站能够在搜索引擎中编入索引 除了少数子目录 以下是我的robots txt设置 robots txt在根目录下 User agent Allow 分离robots txt在子目录中 被排除 User agent Disallow
  • Perl 脚本的 shebang 行应该使用什么?

    哪一个用作 Perl 脚本的 shebang 行更好或更快 perl perl exe fullpath perl perl exe partialpath perl perl exe 并且 当使用 perl 当它在特定系统上运行时 我如何
  • Perl 中函数调用和 goto &NAME 有什么区别?

    我正在读 Perl 这很有趣 但读书时从这里转到 https www tutorialspoint com perl perl goto statement htm在 Perl 中我有一个疑问 我知道 goto 语句有三种类型 转到标签 转
  • Mojolicious:我应该使用一个还是多个 websocket?

    我正在自学 Mojolicious 和 websockets 到目前为止 我已经有了一个网页 它显示数据库中的行 并具有用于添加 删除和更新行以及选择用于排序的列的按钮 目前 它在每个按钮的 javascript onclick 处理程序中
  • 如何匹配与 Perl 中的特定模式不匹配的字符串?

    我知道使用正则表达式很容易匹配除给定字符之外的任何内容 text ab ac ad text s c g Match anything except c text is now c 我不知道如何 排除 字符串而不是字符 我如何 匹配除 ac
  • 如何绑定值 INSERT INTO mysql perl

    我有下面的代码可以工作 但我需要知道如何绑定它们以确保安全 如果我只是将 new row 替换为 并将其放入执行中我收到错误 感谢您的帮助 foreach my field account field order new row param
  • 本地“关闭”binmode(STDOUT, ":utf8")

    我的脚本开头有以下块 usr bin perl5 w use strict binmode STDIN utf8 binmode STDOUT utf8 binmode STDERR utf8 在某些子程序中 当存在其他编码 来自远程子程序
  • Perl 三元条件运算符内部赋值问题

    我的程序中的这段 Perl 代码给出了错误的结果 condition a 2 a 3 print a 无论价值如何 condition就是 输出总是3 为什么呢 Perl 中对此进行了解释文档 http perldoc perl org p
  • Web 开发中的 Perl [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Perl 中的线程定时循环

    本质上 我希望有一个高优先级线程 它以给定的时间间隔 此处为 0 5 毫秒 运行并中断 一切 执行一个短任务 然后返回 睡眠 状态 使用 Ubuntu 11 04 和 perl v5 10 1 问题是 虽然我得到了某种结果 但我不确定是否有
  • 在 Perl 中实现 CLI 工具的最佳实践是什么?

    我正在使用 Perl 实现 CLI 工具 我们可以遵循哪些最佳实践 作为前言 我花了 3 年时间为一家大型金融公司设计并实现了一个相当复杂的 Perl 命令行工具集 以下想法基本上是我们团队设计指南的一部分 用户界面 命令行选项 允许尽可能

随机推荐

  • 在实体框架查询的 Select 子句中使用函数

    我想针对实体框架实现以下逻辑 var items from item in myContext select new Value1 TweakValue item Value1 Value2 TweakValue item Value2 p
  • 具有边缘触发事件的 epoll

    的手册页epoll有一个边缘触发的示例代码 如下所示 for nfds epoll wait epollfd events MAX EVENTS 1 if nfds 1 perror epoll pwait exit EXIT FAILUR
  • 序列化 F# 选项类型

    考虑下面的 F 片段 type MyType CrucialProperty int OptionalProperty string option let first CrucialProperty 500 OptionalProperty
  • 如何清除 Chrome 中的基本身份验证详细信息

    我正在开发一个使用基本身份验证的网站 使用 Chrome 我已经使用基本身份验证登录 我现在想从浏览器中删除基本身份验证详细信息并尝试不同的登录 使用Chrome时如何清除当前的基本身份验证详细信息 如果您在网址中包含用户名 则 chrom
  • Rsyncing git repo 足够好的备份解决方案吗?

    我经常将笔记本电脑备份到外部硬盘 rsyncing git repos 是否足够好备份解决方案或者此方法有任何问题吗 rsync是一个很好的解决方案 跑步可能是个好主意git gc and git repack 不带任何参数 在进行备份之前
  • 使用 fs.readFile 从外部 URL 获取文件

    我的页面上有链接 单击该链接时我想要打开外部 docx 文件 很遗憾fs readFile只读取本地路径 I tried app get getfile function req res var externalURL http www e
  • Python 和 Selenium - 关闭所有选项卡而不关闭浏览器

    我想关闭所有打开的标签页 浏览器窗口 没有实际关闭驱动程序 因为我想继续使用它 driver close 只会关闭聚焦的选项卡 driver quit 将关闭它们 但也会退出驱动程序 我想过使用driver quit 然后重新打开驱动程序
  • 检查一个整数是否是另一个整数的整数幂

    这是一面试问题 给定 2 个整数 x 和 y 检查 x 是否是 y 的整数次方 例如 对于 x 8 和 y 2 答案为 true 对于 x 10 和 y 2 答案为 假 显而易见的解决方案是 int n y while n lt x n y
  • 如何从 std::deque 释放内存?

    我正在使用一个std deque存储相当大量的对象 如果我删除一堆这些对象 在我看来 它的内存使用量不会减少 与 std vector 类似 有办法减少吗 我知道在向量中你必须使用 交换技巧 我认为它在这里也适用 但我宁愿避免这种情况 因为
  • 如何在Java中获取当前日期并添加五个工作日[重复]

    这个问题在这里已经有答案了 我想要两次约会 1 当前日期 格式为 MM dd yy 2 修改日期为当前日期加上五个工作日 周一至周五 格式为 MMM dd yyyy 因此 如果我的当前日期是 6 月 9 日 则 currentDate 应为
  • 在人群区域录制音频时,如何使用 java 消除背景噪音?

    当我使用 JavaSound 或第三方声音捕获工具捕获并将其记录到文件中时 然后读回文件进行修改 有什么办法可以用我的java应用程序消除 背景噪音 例如主要人物说话时的道路交通 空气噪音 Thanks 消除背景噪音非常困难 如果是均匀噪声
  • 如何使用 ACL 相关表获取用户可以访问的对象列表

    我正在设计一个对用户管理 权限有很多要求的系统 因此我决定使用 Spring Security ACL 来管理域对象级别的权限 尽管如此 使用 ACL 来维护用户和实体之间的关系迫使我们依赖它在 UI 上呈现数据 Spring Securi
  • 对 QSlider 使用浮动

    我有一个 QLineEdit 和一个 QSlider 它们在其中相互交互 例如 如果我在 QLineEdit 中设置一个值 滑块将被更新 或者如果我滑动滑块 它将更新 QLineEdit 中的值 If user change value o
  • 如何在Eclipse中使用快捷方式打开运行配置窗口?

    当我进行多个Java应用程序时 我经常需要打开 运行 gt 运行配置 设置应用程序输入或其他参数 那么有没有办法用快捷方式打开这个窗口呢 您可以设置自定义快捷方式Run 命令 窗口 gt 首选项 gt 常规 gt 按键
  • 使用 ant 仅编译部分源代码树

    假设我的源代码在我的 src 树中 也可能在我的 test 树中 假设我只想编译part那棵树的 我想要这样做的原因是多方面的 举个例子 我可能想要创建尽可能最小的 jar 不包括某些类 或者我可能想要我正在编译的内容最快的编译时间 不过
  • 如何在非客户区绘图?

    我希望能够在窗口的非客户区域中的菜单栏右侧进行一些绘图 使用 C MFC 这可能吗 查理找到了答案WM NCPAINT 如果您使用 MFC 代码将如下所示 in the message map ON WM NCPAINT void CMai
  • 我无法接收远程视频流

    我在 Linux 上使用 google chrome 21 x 建立了 webrtc 对等连接 但无法接收任何远程视频流 给对等连接 onaddstream 的回调永远不会被调用 有人可以建议我需要查看的位置吗 我粘贴了整个代码 仍然无法接
  • 如何将 CSS 应用到 :before 内容之后的第一个字母?

    p class normal First character of this paragraph will be normal and will have fon p
  • 状态机、模型验证和 RSpec

    这是我当前的类定义和规范 class Event lt ActiveRecord Base state machine initial gt not started do event game started do transition n
  • 使用 Perl 模块与使用 system() 调用

    最近 我用 Perl 为 cPanel 插件编写了一些脚本 其中虽然大部分代码都是用 Perl 编写的 但也有相当多的 system 命令以及我用来直接执行 shell 命令的命令 我非常确定我可以使用 Perl 模块来代替 考虑到时间紧迫