Потому что на windows 9x нет flock(2).
Используйте File::Lock с CPAN.
perl, входящий в Cygwin -- набор утилит unix для windows, умеет эмуляцию fork.
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/
Этому может быть миллион разных причин, но самая часто встречающаяся -- unix и наследники CP/M используют разные последовательности конца строки.
Если вы их загружаете по ftp, включите режим ASCII.
Названия локалей на windows и unix системах различны. Локаль KOI8-R на unix скорее всего будет называтся ru_RU.KOI8-R, CP1251 может называтся по разному, спросите у администратора сервера.