【问题标题】:Strawberry Perl not recognising special variable for OSNAMEStrawberry Perl 无法识别 OSNAME 的特殊变量
【发布时间】:2016-06-13 14:37:46
【问题描述】:

我最近在运行 Windows 7 的 PC 上将 Strawberry Perl 从版本 5.14.1.1-32bit 升级到 5.24.0-64bit。我有一个在 Windows 和 Linux 下运行的 perl 脚本,当我使用旧版本时命令

use if $^O eq 'MSWin32' , 'Win32::Console::ANSI';

工作,但现在我已经升级我收到错误消息

Unrecognized character \x0F; marked by <-- HERE after use if $<-- HERE near column9 at p:\bin\abc.pl line 31.

有谁知道发生了什么变化,以及如何让新版本的 Strawberry Perl 接受命令?提前感谢所有回复的人。

【问题讨论】:

  • 这是^O 还是ctrl-O 字符?

标签: perl ansi strawberry-perl


【解决方案1】:

您的代码包含 Shift In 控制字符 (0x0F),也称为“Control-O”,而不是字符 ^O。这适用于旧版本的 Perl,但 deprecated in version 5.20.0:

变量名中的文字控制字符

这种弃用会影响诸如 $\cT 之类的东西,其中 \cT 是源代码中的文字控件(例如 NAKNEGATIVE ACKNOWLEDGE 字符)。令人惊讶的是,最初这似乎是作为访问 $^T 等变量的规范方式而添加的插入符号形式只是作为替代。

不推荐使用文字控件表单的主要原因有两个。它有一些可能无法修复的错误,例如 $\cI 不能作为 $^I 的别名,并且它们的使用不能移植到非 ASCII 平台:虽然 $^T 可以在任何地方工作,但 \cT 是 EBCDIC 中的空白。 [perl #119123]

As of 5.24.0,使用包含非图形 ASCII 控制字符的变量名会导致语法错误。

【讨论】:

  • 我按照您的建议更改了它,它就像一个魅力。谢谢!
  • 我认为谈论 "\cO" 是 ASCII SI 和维基百科的链接是无关紧要的噪音。另一方面,到 perldelta 5.24 的链接是中心的,应该在顶部
  • 我对一个人感到惊讶的是,最初的意图是让它成为一个实际的控制角色。这就是 perl 一开始就很酷的地方——它没有不必要的限制。变量名中的控制字符?为什么不! (必须关心 EBCDIC 从来没有也永远不会很酷)
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 2018-02-10
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 2013-05-15
  • 2018-11-12
相关资源
最近更新 更多