gpt4 book ai didi

Perl:如何在没有警告的情况下调用 END {} 中的对象方法?

转载 作者:行者123 更新时间:2023-12-01 06:54:00 24 4
gpt4 key购买 nike

package JustTesting;
use strict;
use warnings;

sub new {
my $self = {};
bless($self, shift);
END { $self->goodbye() };
return $self;
}

sub goodbye {
print "Goodbye.\n";
}

package main;
my $this = JustTesting->new();

输出:

Variable "$self" will not stay shared at ./test line 10.
Goodbye.



显然它有效,我可以用 no
warnings
抑制警告在 END 块内。但我想知道是否有更好的方法
这该怎么做。

我尝试使用这样的匿名子:
my $cleanup = sub { $self->goodbye() };
END { $cleanup->() };

然后像这样:
END { sub { $self->goodbye() }->() };

但我总是收到同样的警告。

最佳答案

您最有可能想要 DESTROY 而不是 END .另见 the section on destructors in perltoot .

package JustTesting;
use strict;
use warnings;

sub new {
my $self = {};
bless($self, shift);
return $self;
}

sub goodbye {
print "Goodbye.\n";
}

sub DESTROY {
my ($self) = @_;
$self->goodbye()
};


package main;
{
say "entering scope";
my $this = JustTesting->new();
say "leaving scope";
}
say "left scope";

输出:

进入范围
离开范围
再见。
左范围

关于Perl:如何在没有警告的情况下调用 END {} 中的对象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1914730/

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