【问题标题】:Any gotchas for Activestate Perl versus POSIX perlActivestate Perl 与 POSIX perl 的任何陷阱
【发布时间】:2013-07-24 13:23:24
【问题描述】:

我有一个依赖于 DateTime 模块的脚本。 作为将我的开发集成到一个环境中的举措的一部分,我已从 linux 和 cygwin 中的命令行更改为 Windows 7 上的 Eclipse。

在 linux/cygwin 中以下行:

$time_value = strftime "%F %H:%M:%S %p", localtime;

产生时间数据:

2013-07-24 13:46:19

但在 Eclipse 中,在 Activestate PERL 环境中(安装了所有相关模块) 我明白了:

%F %H:%M:%S %p

奇怪的是它是完全相同的脚本文件。我正在使用两个环境中都安装的 DateTime 模块,但此输出表明该模块出现故障。

知识渊博的 PERL 大师有什么想法吗?

更新:

我正在使用 POSIX qw(strftime) 作为这个答案中的建议: How can I parse a strftime formatted string in Perl?

我的目标是以这种格式转换日期: 2010 年 8 月 7 日星期三 18:22:30 -0600

进入任何 MySQL date_format 形式。

如果 POSIX 使程序不可移植,我有什么选择?

【问题讨论】:

  • strftime 来自 POSIX 模块,localtime 是标准 Perl 函数。
  • 我们可以告诉你你已经研究过perlport吗?
  • 我对 perlport 不熟悉。我通过尝试一些小项目来自学,所以任何关于资源的建议或提示都将不胜感激。

标签: perl perl-module


【解决方案1】:

您使用的strftime 函数不是来自 DateTime 模块。该模块是纯面向对象的,并使用方法:$dt->strftime($format)

您似乎已经导入了strftime from the POSIX module。对于有问题的函数,对可移植性做了一些限制:

[...] 有关这些和其他参数的详细信息,请参阅系统的“strftime()”手册页。

如果您希望您的代码可移植,您的格式(“fmt”)参数应仅使用 ANSI C 标准(C89,为了安全起见)定义的转换说明符。这些是"aAbBcdHIjmMpSUwWxXyYZ%"。但即便如此,一些转换说明符的结果是不可移植的。

您看到%F 不在这些可移植格式说明符之列。

【讨论】:

  • 谢谢。这有帮助。我猜是时候理解 perlport 了。我想编写可移植代码作为这样做的基本方法。
  • 从上面的答案看不是特别清楚:去掉POSIX,只用DateTime来写可移植代码。
【解决方案2】:

解决方案是将 %F 更改为 %Y-%m-%d。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    相关资源
    最近更新 更多