Next Previous Contents

12. Борьба с глюками ms windows

12.1 Почему мой perl ругается на flock()?

Потому что на windows 9x нет flock(2).

Используйте File::Lock с CPAN.

12.2 Тоже самое, но с fork()?

perl, входящий в Cygwin -- набор утилит unix для windows, умеет эмуляцию fork.

12.3 Как бы мне добится нормальной сортировки в алфавитном порядке, преобразования в прописные/строчные буквы?

Perl для этого опирается на механизм locale. К счастью, это работает и на windows:

Если надо работать с CP866, пишем

  use locale;
  use POSIX;
  &POSIX::setlocale(&POSIX::LC_ALL, "Russian_Russia.866");
  print uc "Да, здесь будут заглавные буквы";

если KOI8 (sic!):

  &POSIX::setlocale(&POSIX::LC_ALL, "Russian_Russia.20866");

если с CP1251 -- просто

use locale;

Со всеми тремя кодировками работают и uc/lc, и /\w/

Проверено под NT на perl 5.005_02, собранном через VC++ 5.0 из исходников, скачанных с CPAN/ports/win32/Standard/

12.4 Почему скрипты, которые я написал дома на windows, при загрузке на unix машину не работают?

Этому может быть миллион разных причин, но самая часто встречающаяся -- unix и наследники CP/M используют разные последовательности конца строки.

Если вы их загружаете по ftp, включите режим ASCII.

12.5 Я включил на windows локаль в своих сриптах, но на Unix-сервере она не работает

Названия локалей на windows и unix системах различны. Локаль KOI8-R на unix скорее всего будет называтся ru_RU.KOI8-R, CP1251 может называтся по разному, спросите у администратора сервера.


Next Previous Contents