gpt4 book ai didi

arrays - 取消引用日期

转载 作者:行者123 更新时间:2023-12-02 08:32:01 26 4
gpt4 key购买 nike

我有一个小脚本,我想在其中返回两个日期之间的日期数组。

问题是添加的标量是通过引用,我如何存储副本或取消引用的值

#!/usr/bin/perl

use strict;
use warnings;
use DateTime;

my $now = DateTime->today;
my $start_date = DateTime->today;
$start_date = $start_date->subtract( days => 45 );

my @dates;
while ( $start_date <= $now ) {
push @dates, $start_date;
$start_date->add( days => 1 );
}

my $date;
foreach (@dates) {
print $_->ymd('/'), "\n";
}

最佳答案

您可以在将对象插入数组时克隆该对象,如下所示

my @dates;

while ( $start_date <= $now) {
push @dates, $start_date->clone;
$start_date->add( days => 1 );
}

foreach (@dates) {
print $_->ymd('/'), "\n";
}

但如果您只想要每个日期的 YMD 字符串,那就太浪费了。你可以直接插入它

my @dates;

while ( $start_date <= $now) {
push @dates, $start_date->ymd('/');
$start_date->add( days => 1 );
}

print "$_\n" for @dates;

您可以通过处理数组本身的元素来更简单地设置数组,如下所示

my @dates = (DateTime->today);
unshift @dates, $dates[0]->clone->subtract(days => 1) for 1 .. 45;

但最终使用 Time::Piece 更简洁,而且可能更快做同样的事情。它是一个核心模块,因此如果您的 perl 副本是最新的,则不需要安装,它远小于 DateTime。 , 并且可能更快

use strict;
use warnings;

use Time::Piece;
use Time::Seconds 'ONE_DAY';


my @dates = map { localtime() - $_ * ONE_DAY } reverse 0 .. 45;

print $_->ymd('/'), "\n" for @dates;

输出

2014/07/24
2014/07/25
2014/07/26
2014/07/27
2014/07/28
2014/07/29
2014/07/30
2014/07/31
2014/08/01
2014/08/02
2014/08/03
2014/08/04
2014/08/05
2014/08/06
2014/08/07
2014/08/08
2014/08/09
2014/08/10
2014/08/11
2014/08/12
2014/08/13
2014/08/14
2014/08/15
2014/08/16
2014/08/17
2014/08/18
2014/08/19
2014/08/20
2014/08/21
2014/08/22
2014/08/23
2014/08/24
2014/08/25
2014/08/26
2014/08/27
2014/08/28
2014/08/29
2014/08/30
2014/08/31
2014/09/01
2014/09/02
2014/09/03
2014/09/04
2014/09/05
2014/09/06
2014/09/07

更新

要在数组中存储字符串而不是 Time::Piece 对象,您可以这样写

use strict;
use warnings;

use Time::Piece;
use Time::Seconds 'ONE_DAY';

my $today = localtime;
my @dates = map { ($today - $_ * ONE_DAY)->ymd('/') } reverse 0 .. 45;

print "$_\n" for @dates;

输出与前面程序的输出相同。

关于arrays - 取消引用日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25710422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com