Что такое файлы модуля Pe rl "chmod" в Windows?
Я написал Perl модуль MySQL:: Admin.
Нет проблем с установщиком ( Module:: Build). Если я пытаюсь установить это в Windows, я получаю сообщение:
сохранить настройки Доступ запрещен Файл: C:/strawberry182/cpan/build/MySQL-Admin-0.67-wIbMnp/cgi-bin/config/settings.pl
Смотрите протокол испытаний для деталей.
Так что же такое "chmod", что файл будет доступен для записи под Windows с помощью http://strawberryperl.com/?
1 ответ
Я вижу в вашем коде несколько случаев, когда вы забыли закрыть дескрипторы файлов. В отличие от Unix, в Windows предусмотрена автоматическая обязательная блокировка файлов для открытых файлов, которая может отображаться как ошибка "Отказано в доступе" при попытке записи в файл, который все еще открыт. Моим первым предложением было бы изменить каждое использование глобального дескриптора файла, такого как open FILE
в open my $fh
, Использование лексических файловых дескрипторов означает, что они автоматически закрываются при выходе из области видимости, что значительно уменьшает проблему.
Вам также больше не нужно использовать gensym
создать лексический дескриптор файла, open my $fh
работает еще в 5.6.
Вы также не можете проверить, что многие из ваших файловых команд работают. стекаются, ищут, усекают... у многих из них нет чеков. Вы можете добавить проверки ко всем из них, или вы можете использовать autodie для тихого добавления проверок для вас, или вы можете использовать Path:: Tiny, который будет генерировать исключения при сбое и имеет много-много удобных методов манипулирования файлами. Просто убедитесь, что добавили их как зависимости на этапе настройки.
Во-вторых, используя system
ни на что, кроме $^X
(текущий исполняемый файл Perl) будет непереносимым. Замените их все эквивалентными функциями Perl. Опять же, Path::Tiny пригодится здесь.
В-третьих, разрешения Windows принципиально отличаются от Unix. Такие вещи, как chown, chmod и исполняемые биты, на самом деле не отображаются. Практическое правило: вам, как правило, не нужно беспокоиться о правах доступа к файлам в Windows.
Наконец, приобретите виртуальную машину Windows, установите на нее http://strawberryperl.com/ и протестируйте свой код. Ваш код ориентирован на Unix, и вам будет гораздо быстрее отлаживать множество мелких проблем, которые есть в Windows, чем задавать вопросы тестеру Windows CPAN.