2016-06-13 41 views
4

我最近将草莓Perl从版本5.14.1.1-32bit升级到运行Windows 7的PC上的5.24.0-64bit。我有一个在Windows和Linux下运行的perl脚本,当我使用旧版本的命令草莓Perl无法识别OSNAME的特殊变量

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版本接受命令?预先感谢所有回应的人。

+2

这是一个'^'和'O'还是一个'ctrl-O'字符? –

回答

7

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

此折旧影响之类的东西$ \ CT,其中\ CT是文字的控制(如NAK

文字控制字符或NEGATIVE ACKNOWLEDGE字符)在源代码中。令人惊讶的是,它似乎最初是作为访问诸如$^T之类的变量的规范方式而设计的,其中插入的形式仅作为替代方式添加。

字面控制表单由于两个主要原因而被弃用。它有可能存在的不可修复的错误,例如$ \ cI不作为$^I的别名工作,并且它们的用法不能移植到非ASCII平台上:$^T可以在任何地方工作,\ cT是EBCDIC中的空格。 [perl#119123]

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

+1

我按照你的建议改变了它,它像魅力一样工作。谢谢! – Leslie

+0

我认为''\ cO“'是ASCII'SI'和维基百科的链接是不相干的噪音。另一方面,与perldelta5.24的链接是中心的,应该在顶部 – Borodin

+0

我有一个上午*不会感到惊讶,原来的意图是它是一个实际的控制角色。这就是perl在开始时很酷的一件事 - 它没有不必要的限制。控制变量名中的字符?为什么不! (必须关心EBCDIC从来也不会很酷) –