2016-06-13 82 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從來也不會很酷) –