2013-11-13 4 views
1

Почему такое поведение так?Выполнение скрипта perl в dos с помощью perl вызывает различия?

test2color.pl содержит:

#! perl -slw 
use strict; 
use Win32::Console::ANSI; 
use Term::ANSIColor qw(:constants); 

print BLACK, ON_WHITE, "black on white\n"; 
print WHITE, ON_BLACK, "white on black\n"; 
print GREEN, ON_CYAN, BLINK, "garish!\n"; 
print RESET; 

Выход:

enter image description here

+0

Вы установили модуль 'Win32 :: Console :: ANSI'? –

ответ

6

Ваш

H:\test\perl>perl test2color.pl 

использует первый Perl (.exe), который находит в переменной PATH среды. Это может быть perl из вашей установки cygwin.

H:\test\perl>test2color.pl 

использует информацию OS ассоциировать расширение .pl с конкретным командной строки/исполняемый файл, который будет работать все ваши .pl. ftype и assoc могут использоваться для отображения/управления этими ассоциациями.

Я предполагаю, что ваш ftype для .pl указывает на - совершенно другое - c:\Perl\bin\perl.exe.

+3

'use if $^O eq 'MSWin32', 'Win32 :: Console :: ANSI';' заставит его работать под cygwin, а также с вашей Windows-сборкой Perl. – ikegami

+0

Да, у меня установлен Strawberry Perl и Cygwin (с меньшим модулем perl, я думаю). и в PATH путь CYGWIN начинается первым, прежде чем клубника. Итак, поскольку Strawberry по умолчанию поддерживает ANSI & WIN32. и Strawberry instalation, возможно, выполнили эту работу с файловой ассоциацией SO, если мне нужно сделать мой сценарий более портативным (работает в системе, где клубника/Active perl не установлена, с добавлением пакетов) if (($^O eq 'MSWin32') && ($^O eq 'Term')) { print BLACK, ON_WHITE, "black on white \ n"; } else { Печать "NO Color Sorry"; } Это должно работать, я верю –

Смежные вопросы