2016-06-13 10 views
4

최근에 Windows 7을 실행하는 PC에서 Strawberry Perl을 버전 5.14.1.1-32bit에서 5.24.0-64bit로 업그레이드했습니다. 필자는 Windows와 Linux 모두에서 실행되는 펄 스크립트를 가지고 있습니다. 나는하지만 지금은 내가딸기 Perl이 OSNAME 특수 변수를 인식하지 못합니다.

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

사람이 변경 알고 있나요 오류 메시지가 업그레이드 한 것으로, 나는 새를 얻을 수있는 방법, 이전 버전

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

근무 명령을 사용했을 때 명령을 수락하는 딸기 펄의 버전? 응답하는 모든 사람에게 미리 감사드립니다.

+2

'^'과 'O'또는 'ctrl-O'문자입니까? –

답변

7

코드에 ^O 대신 Shift In 제어 문자 (0x0F) ("Control-O"라고도 함)가 있습니다. 이는 펄의 이전 버전에서 작동하지만 deprecated in version 5.20.0했다 : 변수 이름

이 중단는 \ CT 리터럴 컨트롤 (같은 NAK이다 $ \ CT, 같은 것들에 영향을 미친다에서

리터럴 제어 문자 또는 NEGATIVE ACKNOWLEDGE 문자)를 소스 코드에 삽입하십시오. 놀랍게도 원래는 $^T와 같은 변수에 액세스하는 표준 방법으로 의도 된 것으로 보입니다. 캐럿 양식은 대안으로 만 추가되었습니다.

리터럴 제어 양식은 다음 두 가지 이유로 인해 사용되지 않습니다. 그것은 $^I에 대한 별명으로 작동하지 않는 $ \ cI와 ASCII가 아닌 플랫폼에 이식 할 수없는 것과 같은 수정 불가능한 버그가 있습니다. $^T는 어디에서나 작동하지만 \ cT는 EBCDIC의 공백입니다. 구문 오류 비 그래픽 ASCII 제어 문자 결과를 포함하는 변수의 이름을 이용하여 펄 # 119123]

As of 5.24.0.

+1

당신이 제안한대로 그것을 바 꾸었습니다, 그것은 매력처럼 작동했습니다. 감사! – Leslie

+0

나는''\ cO ''에 대한 이야기가 ASCII'SI'이고 Wikipedia에 대한 링크가 관련성없는 소리라고 생각한다. 다른 한편, perldelta 5.24에 대한 링크는 중앙에 있으며 상단에 있어야합니다 – Borodin

+0

나는 원래 의도가 실제 제어 문자로 사용된다는 사실에 놀라지 않고 있습니다. 그것은 처음에는 perl에 대해 멋진 점이었습니다. 불필요한 제한이 없었습니다. 변수 이름의 문자를 제어 하시겠습니까? 왜 안돼! (EBCDIC에 대해 신경 쓰지 않고 결코 멋지지 않을 것입니다) –