Solaris 10似乎不太喜欢我。 我正在尝试运行一个简单的脚本来接受日期并返回该日期的纪元:
#!/usr/bin/perl -w
use strict;
use Time::ParseDate;
my $date1 = "Mon Mar 27 05:54:08 CDT 2009";
#Convert to seconds since start of epoch
my $time1 = parsedate($date1);
print $time1;
在RHEL盒子上工作得很好,但是在Solaris上都搞砸了(两者都有5.8.8 Perl),给出了以下错误信息。
无法在@INC中找到Date / Parse.pm(@INC包含:/usr/perl5/5.8.4/lib/sun4-solaris-64int /usr/perl5/5.8.4/lib / usr / perl5 /site_perl/5.8.4/sun4-solaris-64int /usr/perl5/site_perl/5.8.4 / usr / perl5 / site_perl /usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int / usr / perl5 / vendor_perl /5.8.4 / usr / perl5 / vendor_perl。)在try1.pl第3行。 BEGIN失败 - 编译在try1.pl第3行中止。
这里有什么问题?如何纠正这个?。
哦......差点忘了,我无法在这个Solaris盒子上修改/安装/修改任何东西,这个脚本需要运送给运行Solaris 10的客户!所以要求他安装模块绝对不是一个选择。 :(
答案 0 :(得分:4)
错误消息显示它无法在Perl库中找到模块Date :: Parse包含路径( @INC )。
该模块可从CPAN(Comprehensive Perl Archive Network)获得。如果您需要一个未包含在基本安装中的Perl模块,通常(> 90%)可以从CPAN(事实上的 Perl模块存档站点)获得它。
您的问题通过CPAN模块解决(CPAN模块用于从CPAN检索模块)文档。我建议从FAQ问题5开始,“我不是root用户,如何在个人目录中安装模块?”
答案 1 :(得分:4)
你应该能够使用Time :: Piece这是Perl 5.10 的核心(这里修正:它不是5.8中的核心)。这是我机器上的一个例子。请参阅man strftime
,man strptime
和perldoc Time::Piece
。在Time::Piece
文档中,您需要查看日期解析部分。 (转换细节可能在Solaris计算机上有所不同。我现在正在使用OS X.)
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $date = Time::Piece->strptime("Tue Apr 7 12:46:59 2009",
"%a %b %e %H:%M:%S %Y");
my $epoch_date = $date->epoch;
print "$epoch_date\n";
编辑:解析器在CDT上窒息(%Z似乎无法识别它),因此您可能需要分两步完成此操作。以下适用于我:
my $string = "Mon Mar 27 05:54:08 CDT 2009";
$string =~ s/CDT/-0500/; # Replace timezone with offset from UTC
my $date = Time::Piece->strptime($string, "%a %b %e %H:%M:%S %z %Y");
my $epoch_date = $date->epoch;
print "$epoch_date\n";
然而,现在我们还有CDT =>的额外问题。 -0500对CST => -0600。我正式讨厌夏令时。
答案 2 :(得分:3)
您确定这是正确的错误消息吗? Date::Parse是与Time::ParseDate完全独立的模块。它们提供类似的功能,但不要互相使用。
您可以使用Module::CoreList获取5.8.8附带的模块列表。我不知道Solaris 10是否包含任何其他模块。
您可能需要从合适的模块中复制内容并将其粘贴到脚本中。 (请记住,Perl文件可能有多个package
语句。)
答案 3 :(得分:3)
由于您需要将程序发送给不会为您安装模块的客户,因此您需要使用PAR::Packer创建包含所有依赖项的本机可执行文件(或仅使用核心模块)。
答案 4 :(得分:0)
Solaris 10似乎不太喜欢我。我正在尝试运行一个简单的脚本来接受日期并返回该日期的纪元
愚蠢的问题,但输入日期字符串的来源是什么?如果从系统中获取字符串,则代码可以更加简单。
答案 5 :(得分:0)
旧线程,但这可能会帮助有同样问题的人。使用标准Time :: Local模块中的timelocal函数。见perlfaq 4