我写了一个 Perl 模块 MySQL::Admin .
安装程序没有问题 ( Module::Build )。如果我尝试在 Windows 上安装它,我会收到消息:
saveSettings Permission denied File: C:/strawberry182/cpan/build/MySQL-Admin-0.67-wIbMnp/cgi-bin/config/settings.pl
请参阅test report了解详情。
那么,在 Windows 下使用 Strawberry Perl 可写入文件的正确“chmod”是什么? ?
最佳答案
我在您的代码中看到一些您忘记关闭文件句柄的实例。与 Unix 不同,Windows has automatic, mandatory file locking on open files当您尝试写入仍打开的文件时,这可能会显示为“权限被拒绝”错误。我的第一个建议是更改全局文件句柄的每次使用,例如将 open FILE
更改为 open my $fh
。使用词法文件句柄意味着它们在超出范围时会自动关闭,从而大大减少问题。
您也不再需要使用 gensym
创建词法文件句柄,open my $fh
可以追溯到 5.6。
您也未能检查许多文件命令是否有效。聚集、寻找、截断……其中许多没有检查。您可以对所有这些添加检查,也可以使用 autodie悄悄地为您添加支票,或者您可以使用 Path::Tiny它会在失败时抛出异常,并且有很多很多方便的文件操作方法。请务必将它们添加为 dependencies in your configure phase .
其次,在除 $^X
(当前 Perl 可执行文件)之外的任何内容上使用 system
都将是不可移植的。将它们全部替换为等效的 Perl 函数。同样,Path::Tiny 在这里会派上用场。
第三,Windows的权限与Unix有着根本的不同。像 chown 和 chmod 以及可执行位这样的东西并没有真正映射。经验法则是您通常不必关心 Windows 上的文件权限。
最后,给自己准备一个Windows虚拟机,安装Strawberry Perl并测试您的代码。您的代码非常以 Unix 为中心,并且您在 Windows 上调试它的许多小问题比向 Windows CPAN 测试人员提问要快得多。
关于mysql - Windows 上正确的 "chmod"Perl 模块文件是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29305110/