0

我写了一个 Perl 模块MySQL::Admin

安装程序没有问题(Module::Build)。如果我尝试在 Windows 上安装它,我会收到以下消息:

保存设置
 没有权限
 文件:C:/strawberry182/cpan/build/MySQL-Admin-0.67-wIbMnp/cgi-bin/config/settings.pl

详见测试报告

那么,在 Windows 下使用Strawberry Perl可以写入文件的正确“chmod”是什么?

4

1 回答 1

2

我在您的代码中看到一些您忘记关闭文件句柄的情况。与 Unix 不同,Windows 对打开的文件具有自动强制文件锁定功能,当您尝试写入仍处于打开状态的文件时,可能会显示为 Permission Denied 错误。我的第一个建议是将全局文件句柄的每次使用更改open FILEopen my $fh. 使用词法文件句柄意味着它们会在超出范围时自动关闭,从而大大减少问题。

您也不再需要使用gensym创建词法文件句柄,open my $fh可以追溯到 5.6。

您也没有检查您的许多文件命令是否有效。聚集,寻找,截断......其中许多没有检查。您可以为所有这些添加检查,或者您可以使用autodie悄悄地为您添加检查,或者您可以使用Path::Tiny,它会在失败时抛出异常并且有很多很多方便的文件操作方法。只要确保在您的配置阶段将它们添加为依赖项即可。

其次,system在除$^X(当前的 Perl 可执行文件)之外的任何东西上使用都将是不可移植的。将它们全部替换为等效的 Perl 函数。再次,Path::Tiny 将在这里派上用场。

第三,Windows 权限与 Unix 根本不同。像 chown 和 chmod 以及可执行位之类的东西并没有真正映射。经验法则是您通常不必担心 Windows 上的文件权限。

最后,给自己一个 Windows 虚拟机,在上面安装Strawberry Perl,然后测试你的代码。您的代码非常以 Unix 为中心,与向 Windows CPAN 测试人员提问相比,您在 Windows 上调试许多小问题要快得多。

于 2015-03-27T18:30:17.160 回答