gpt4 book ai didi

perl - -CSDA 仅在 shebang 行上指定有什么好处?

转载 作者:行者123 更新时间:2023-12-04 15:03:54 24 4
gpt4 key购买 nike

我正在寻找某人权威地确认或更正我认为我对 -CSDA 的了解Perl 脚本的 shebang 行上的选项。

perldoc perlrun用于 -CSDA 的文档.简要地

  • S: STDIN, STDOUT and STDERR are assumed to be in UTF-8
  • D: UTF-8 is the default PerlIO layer for both input and output streams
  • A: @ARGV elements are expected to be strings encoded in UTF-8

  • 对于 -CSDA要产生任何效果,必须在命令行中指定它,如 perl -CSDA script.pl .
  • 在 5.10 之前,-CSDA在 shebang 线上会默默地失败,因为标准流已经打开并且 @ARGV除非 -CSDA,否则在遇到它时已经填充了也已经在命令行上指定了。
  • 5.10后,-CSDA仅出现在 shebang 行上的原因 perl因为那个问题而呲牙咧嘴。
  • 带有 -CSDA 的脚本曾经与 perl 一起使用的s pre-5.10 应该有 -CSDA从 shebang 行中删除,因为它从未在命令行上使用这些选项调用(并且这些选项,如果仅在 shebang 行上指定,则什么也不做)。

  • 我很想得到一些关于我上述哪些假设错误的可靠反馈。

    最佳答案

    不确定我的权威性,但我知道这是如何工作的。

  • 你的第一个假设几乎是准确的。要使 SDA 选项生效,它们必须在解释器启动时出现。这可能是由于命令行上的 -CSDA,或者可能是由于 PERL_UNICODE 环境变量,或者可能是我不知道的其他一些方法。
  • 你的第二个假设是正确的,至少对于 5.8.8。请注意,对于脚本打开的流,D 标志仍然具有其正常效果。
  • 你的第三个假设是正确的。但是,从 5.10.1 开始,如果通过 PERL_UNICODE 环境变量或其他一些机制启用了适当的标志,它就不会发出咝咝声。
  • 您的第四个假设通常不正确。我猜你指的是直接调用脚本的情况,而不是使用脚本作为参数调用 perl 解释器。一般有两种情况。
  • 在操作系统确定任何扩展名为“.pl”的文件将被传递给 perl 解释器执行的系统上,如 Windows,您可能是正确的。但是可以说,在没有 -CSDA 的情况下调用脚本时发出吱吱声是期望的行为,而不是因为标准输入和 @ARGV 不是脚本所期望的 UTF-8 而神秘失败的事情。
  • 在直接执行脚本时读取 shebang 行的系统上,像大多数 *nix shell 一样,在调用解释器时将使用 shebang 行中指定的命令行选项,因此将使用 shebang 行上的 -CSDA。
  • 关于perl - -CSDA 仅在 shebang 行上指定有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5353194/

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