无法通过Strawberry Perl安装Win32API::File::Time模块求助
Strawberry Perl安装Win32API::File::Time模块报错解决方法
我全新安装了Strawberry Perl,尝试通过CPAN安装Win32API::File::Time模块时持续报错,报错信息如下:
# 测试失败:'获取的修改时间与stat()一致' # 在 t\file.t 第90行。 # 实际值: 1635942245 # 期望值: 1635945845 # GetFileTime: 2021年11月3日 周三 08:24:05 # stat: 2021年11月3日 周三 09:24:05 # 看起来4个测试中失败了1个。 t\file.t ... 可疑,测试返回1 (wstat 256, 0x100) 1/4个子测试失败 测试总结报告 ------------------- t\file.t (Wstat: 256 (退出码1) 测试数:4 失败数:1) 失败的测试: 1 非零退出状态:1 文件数=2, 测试数=6, 耗时1秒 (用户时间0.03 + 系统时间0.06 = 总CPU时间0.09) 结果: 失败 1/2个测试程序失败。1/6个子测试失败。 锁文件已移除。 WYANT/Win32API-File-Time-0.012.tar.gz C:\Strawberry\perl\bin\perl.exe ./Build test -- 未通过 //提示// 查看该模块的cpan测试结果,可执行: reports WYANT/Win32API-File-Time-0.012.tar.gz 停止执行: 'install' 对 'Win32API::File::Time' 执行失败。 在此命令期间失败: WYANT/Win32API-File-Time-0.012.tar.gz : make_test 不通过 cpan>
问题原因
报错核心是时区不匹配:GetFileTime返回UTC标准时间,而stat返回的是本地时区时间(你的时区为UTC+1),测试用例未处理时区转换逻辑,导致时间戳比对失败。
解决方法
方法1:跳过测试强制安装(最简单)
在CPAN交互shell中执行:
force install Win32API::File::Time
模块本身的功能不受时区问题影响,只是测试用例未适配时区场景,跳过测试即可完成安装。
方法2:修改测试用例后安装
- 拉取模块源码到本地目录:
look WYANT/Win32API-File-Time-0.012.tar.gz
- 打开
t/file.t文件,定位到第90行附近的时间比对代码,添加时区转换逻辑,或者直接注释掉该测试用例。 - 执行安装:
perl ./Build install
- 退出源码目录:
exit
方法3:同步系统时区(辅助排查)
确保Windows系统时区设置正确,但此方法无法直接解决测试用例的硬编码问题,仅作为基础环境校验步骤。
内容的提问来源于stack exchange,提问作者Rob F.
相关产品推荐
相关产品推荐

