gpt4 book ai didi

Perl 变量范围似乎不合作

转载 作者:行者123 更新时间:2023-12-01 05:37:51 25 4
gpt4 key购买 nike

我的所有变量都按照 my $var 格式声明。

在我的程序中,我调用了 mainMethod()

然后在 mainMethod 中定义一个 DateTime 变量,然后将它传递给一个单独的辅助方法 3 次。:

 my ($day,$month,$year)=(localtime)[3,4,5];
my $dt = DateTime->new(
year => $year,
month => 2 + $month,
day => 1,
hour => 8,
minute => 30,
time_zone => 'America/New_York'
);
helper($dt, $year, $month, $day,);
helper($dt,$year, $month, $day,);
helper($dt,$year, $month, $day,);

helper 中,我开始于:

my $date = $_[0];
my ($year, $month, $day) = ($_[1],$_[2],$_[3]);

此方法做了很多不同的事情,但我对 $date 所做的唯一更改是 $date = $date->add(days => (3 - $date-> day_of_week) % 7);

问题是,我在辅助方法中对 $date 所做的更改似乎在每次我从 mainMethod 调用该方法时都持续存在 注意:我是不返回任何东西

例如,如果 $dt5helper$date + 2 我会得到

helper($dt) #output: 7
helper($dt) #output: 9
helper($dt) #output: 11

而不是预期的每次响应 5。

在方法结束时,是否缺少某些步骤来重置这些变量?

最佳答案

DateTime 创建一个 reference .

因此,当您调用 helper($dt) 时,您将引用的副本传递给 helper。它不会创建一个全新的 DateTime 对象。

您对传递的值所做的任何更改都会对您已经创建的单个 DateTime 对象进行。

如果要创建三个不同的 DateTime 对象,则需要调用 DateTime->new 三次。

关于Perl 变量范围似乎不合作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60399487/

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