Обнаружение глобального разрушения в Perl

Я хотел бы определить, подвергается ли мой объект УНИЧТОЖЕНИЕ ' d как часть глобального уничтожения и распечатать предупреждение (поскольку это явно будет ошибкой и приведет к потере данных). Очевидный способ сделать это может выглядеть так:

sub DESTROY {
    my $self = shift;
    # ⋮
    if (i_am_in_global_destruction()) {
        warn "I survived until global destruction";
    }
}

но я не смог найти хороший способ обнаружить глобальное разрушение (вместо обычного refcount hit 0 destroy).

Под "хорошим способом" я имею в виду не это, хотя оно работает в 5.10.1 и 5.8.8, вероятно, ломает второе, кто-то бросает на него странный взгляд:

sub DESTROY {
    $in_gd = 0;
    {
        local $SIG{__WARN__} = sub { $_[0] =~ /during global destruction\.$/ and $in_gd = 1 };
        warn "look, a warning";
    }
    if ($in_gd) {
        warn "I survived until global destruction";
    }
}'
5
задан skaffman 5 February 2011 в 15:38
поделиться