Perl语法帮助

时间:2016-10-18 01:51:08

标签: perl

我是perl的新手,任何人都可以在下面命令解释我使用$ t [1]和timelocal(1,1,1,反向@t)的目的是什么。

下面用于将时间戳转换为纪元格式的命令。但请解释我使用这个命令$ t [1] - 和timelocal(1,1,1,反向@t)。

perl -MTime::Local=timelocal -e '@t = split(/[-\/]/, $ARGV[0]); $t[1]--; print timelocal(1,1,1,reverse @t);' $date

2 个答案:

答案 0 :(得分:3)

一个例子是按顺序:

perl -MTime::Local=timelocal -e '
    @t = split(/[-\/]/, $ARGV[0]);
    $t[1]--;
    print timelocal(1,1,1,reverse @t);
' "2016-10-18"

将打印出一个纪元日期(自1970年1月1日起的秒数)

1476766861

查看文档:{​​{3}}我们看到:

  

值得特别注意所提供值的预期范围。该月的某天是实际的一天(即1..31),   而月份是自1月份(0..11)以来的月数。这是   与localtime()和gmtime()返回的值一致。

第一个语句将字符串2016-10-18用破折号和斜杠拆分成数组@t = (2016, 10, 18)。默认情况下,Perl数组从0开始,因此$t[1]表示第二项,即月份,此处设置为10。由于localtime需要数月(0-11),我们需要减去1,将$t[1]设置为9。最后一个语句只是将日期部分转换回纪元时间,反转@t以匹配timelocal的参数顺序:

 #       timelocal( $sec, $min, $hour, $mday, $mon, $year )
 $time = timelocal(     1,    1,    1,    18,    9,  2016 ); # time in seconds = 1476766861

答案 1 :(得分:1)

它从第一个组件中减去1。 @t数组。 我这是Month字段。 注意:首先[1],而不是Zeroth [0]。

http://www.perlmonks.org/?node_id=665996

此致

韦恩。