mysql - Windows 上正确的 "chmod"Perl 模块文件是什么?

标签 mysql windows perl cpan module-build

我写了一个 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/

相关文章:

mysql - 仅从查询获取parent>child1_1>child1_1_1>child1_1_1_1结构

Python 不打开日文文件名

php - 从 URI 和 Web Root 中提取公共(public)路径

perl - 将 ASCII 码转换为数字

java - ORMlite + MySQL 外键绑定(bind)

php - MySQL 和 PHP 一次选择多个条目的值

android - React-native run-android 总是下载一切

windows - 从 Windows 上的 bash 脚本运行 Openssl - 主题不以 '/' 开头

regex - 删除所有标点符号的等效正则表达式

MySQL 计算在单元格中显示为列表的数据的出现次数