为什么使用自动激活文件句柄的三参数开放调用是 Perl 最佳实践?

2024-05-12

我有两个关于 Perl 的问题open功能:

1)我好像记得从Perl 最佳实践的 3 参数版本open比两个参数版本更好,例如

open(OUT, '>>', $file);

vs.

open(OUT, ">>$file");

这是为什么?前几天我试图告诉某人使用 3 参数版本,但似乎无法用任何东西来支持它。

2)我似乎还记得自动激活的文件句柄比裸字文件句柄更受青睐(他们称之为不同的东西)?并且也不记得为什么,例如

open(my $out, '>>', $file);

vs.

open(OUT, '>>', $file);

Is it a strict事物?我似乎记得能够使用OUT with strict但我不记得了。


  • 使用类型团作为文件句柄(例如OUT)不是一个好主意,因为它们在整个程序中是全局的 - 您需要确保没有其他例程(包括模块中的例程)使用相同的名称(包括将来的例程)。
  • 使用 open 的两个参数形式会使您的应用程序遭受由包含特殊字符的变量引起的错误行为,例如my $f; open $f, ">$some_filename";暴露在错误中$some_filename包含一个领先的>将改变程序的行为。

使用三参数形式可以通过将模式和文件名分隔成单独的参数来避免这种情况,这样它们就不会相互干扰。

此外,使用带有管道的大量参数形式是一个非常好的主意:

open $pipe, '|-', 'sendmail', '[email protected] /cdn-cgi/l/email-protection';

比将所有操作作为单个字符串更好 - 它避免了可能的 shell 注入等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用自动激活文件句柄的三参数开放调用是 Perl 最佳实践? 的相关文章

随机推荐

  • 如何使用本地 nuget 包源进行 Dockerfile dotnet 恢复 [重复]

    这个问题在这里已经有答案了 我正在尝试使用本地 nuget 包进行 dotnet 恢复 我尝试按照本教程进行操作 无需互联网即可恢复 dotnet https blog bigfont ca dotnet restore without a
  • JS - 如何将图像对象变成灰度并显示它

    基本上 当单击按钮时 它会告诉移动设备转到相机 一旦相机拍照 它就会给我图像数据 它被称为数据 URL 吗 这是我处理它的代码 var imagesrc data image jpeg base64 imageData var myimag
  • 从 node.js 创建对 AWS ES 实例的有效签名请求

    我试图找到一个示例 说明如何连接到 Node js 中的 AWS ES 实例 然后通过一个简单的请求访问 ES 集群 我正在尝试使用elasticsearch节点包 https www npmjs com package elasticse
  • 在 Objective-C 中,逗号用作语句分隔符时有什么作用?

    我正在查看第三方的一些源代码 并且反复看到对我来说新的语法 基本上他们用逗号而不是分号分隔语句 它可以编译并运行 但我不明白它在做什么 看起来是这样 if url url release url nil 有时他们也会在不使用 if 的情况下
  • 将存储过程的结果加上额外的列插入表中

    如何在其中插入更多列dbFileListOnly表以及 EXEC 查询 INSERT INTO admindb dbfilelistonly path col1 col2 path EXEC RESTORE FILELISTONLY FRO
  • 如何加载Jquery Tiny滚动条

    所以我想自定义一个滚动条 我发现了一个很小的滚动条 这是一个jquery插件 http baijs nl tinyscrollbar http baijs nl tinyscrollbar 问题是 无论如何我都无法让它工作 我将 Jquer
  • javascript 加壳器与压缩器

    我想知道加壳器与压缩器的区别 优点是什么 即您应该在网络应用程序中部署压缩版本还是压缩版本 示例代码 var layout NAVVISIBLE 1 Init function this Resize Dimensions function
  • 具有多个 sqlite 文件的核心数据

    如何将 Core Data 与多个 SQLite 文件一起使用 每个文件都包含相同的结构 但数据是从不同的位置检索的 我希望能够在运行时根据应用程序设置在这些 sqlite 文件之间切换 当然 只需指向持久存储协调器 NSPersisten
  • 如何在Android中显示进度对话框?

    我想展示ProgressDialog当我单击 登录 按钮时 需要一些时间才能移动到另一个页面 我怎样才能做到这一点 ProgressDialog pd new ProgressDialog yourActivity this pd setM
  • 如何在R中绘制仪表图表?

    如何在 R 中绘制以下图 Red 30 Yellow 40 Green 30 Needle at 52 所以这里有一个完整的ggplot解决方案 注意 从原始帖子中编辑 在仪表中断处添加数字指示器和标签 这似乎是OP在评论中所要求的 如果不
  • Compose 扩展抛出错误:找不到 V3 代理

    我是在 Teams 中创建 Compose 扩展的新手 当我将其添加到我的 Teams 时遇到问题 所有配置均已就位 从注册机器人到将其托管为 Azure 上的机器人服务 再到处理代码中的撰写扩展查询 我已在清单中共享了机器人 ID 并为机
  • hive 从两个数组创建映射或键/值对

    我有两个具有相同数量值的数组 它们映射为 1 1 我需要从这两个数组创建一个键 值对或映射 键 值 任何想法或提示都会有帮助 当前表结构 USA WEST NUMBER Street City 135 Pacific Irvine USA
  • R data.table fread 使用不带标题的命名 colClasses(例如没有 col.names?)

    更新 2016 年 6 月 col names 已添加到 data table 1 9 6 所以问题已经结束 每个人都非常高兴 我想我现在可以将所有 read csv 调用转换为 fread 调用 而不必担心破坏 原问题 使用数据表1 9
  • 如何将pgp私钥传输到另一台计算机? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 I read 本文 http www robertsosinski com 2008 02 18 working with pgp and mac o
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • React-Redux:绑定按键操作以启动减速器序列的规范方法是什么?

    这是一个关于react redux的新手问题 我花了几个小时四处搜寻才发现 所以我发布了这个问题 然后为后代回答 也可能是代码审查 我正在使用 React Redux 创建一个游戏 我想使用 WASD 键在小地图上移动角色 这只是更大努力的
  • 有 ALAssetsLibrary 的示例吗

    对于iPhone 4来说 很多API都不能再使用了 我正在寻找 UIImageWriteToSavedPhotosAlbum 的替代解决方案 ALAssetsLibrary 是 Apple 在新 iOS 4 中提供的当前解决方案 任何人都有
  • Elasticsearch 数组必须和must_not

    我的 elasticsearch 数据库中有一个如下所示的文档 tags gt tag 1 tag 2 tag 3 tag A created at gt 2013 07 02 12 42 19 UTC label gt Mon super
  • `numpy.diff` 和 `scipy.fftpack.diff` 在微分时给出不同的结果

    我正在尝试计算一些数据的导数 并且正在尝试比较有限差分的输出和谱方法的输出 但结果却截然不同 我无法弄清楚到底为什么 考虑下面的示例代码 import numpy as np from scipy import fftpack as sp
  • 为什么使用自动激活文件句柄的三参数开放调用是 Perl 最佳实践?

    我有两个关于 Perl 的问题open功能 1 我好像记得从Perl 最佳实践的 3 参数版本open比两个参数版本更好 例如 open OUT gt gt file vs open OUT gt gt file 这是为什么 前几天我试图告