Strawberry Perl无法识别OSNAME的特殊变量

Les*_*lie 4 perl ansi strawberry-perl

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

use if $^O eq 'MSWin32' , 'Win32::Console::ANSI';
Run Code Online (Sandbox Code Playgroud)

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

Unrecognized character \x0F; marked by <-- HERE after use if $<-- HERE near column9 at p:\bin\abc.pl line 31.
Run Code Online (Sandbox Code Playgroud)

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

Thi*_*Not 7

您的代码包含Shift In控制字符(0x0F),也称为"Control-O",而不是字符^O.这适用于旧版本的Perl,但在版本5.20.0已弃用:

变量名中的文字控制字符

这种弃用会影响$\cT之类的内容,其中\ cT是源代码中的文字控件(如字符NAKNEGATIVE ACKNOWLEDGE字符).令人惊讶的是,最初这似乎是作为访问变量(如$ ^ T)的规范方式,仅将插入符号表单作为替代添加.

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

从5.24.0开始,使用包含非图形ASCII控制字符的变量名会导致语法错误.