Como posso desligar um objeto em Perl?
Pergunta
A partir de Perldoc -f abençoe:
bless REF,CLASSNAME
Esta função diz a coisa referenciada por
REF
que é agora
um objeto noCLASSNAME
pacote.
Existe alguma maneira de obter uma estrutura não abençoada sem cópia desnecessária?
Solução
unbless($ref)
Remova a bênção de quaisquer objetos encontrados na estrutura de dados passados.
#!/usr/bin/perl
use strict; use warnings;
use Scalar::Util qw( refaddr );
use Data::Structure::Util qw( unbless );
my $x = bless { a => 1, b => 2 } => 'My';
printf "%s : %s\n", ref $x, refaddr $x;
unbless $x;
printf "%s : %s\n", ref $x, refaddr $x;
Resultado:
My : 237356 HASH : 237356
Outras dicas
Possível duplicado de uma pergunta sobre MSDN:
WebProvisioned evento não dispara quando subwebs são criado programaticamente ou com o PowerShell
Respostas de cima:
.2 As coisas precisam considerar aqui
.
direitos adequados do usuário que executa o comando poder shell.
Receptor de evento não deve ter objeto SPContext nele. Como seu nulo em caso de PowerShell enquanto estiver disponível enquanto você trabalha diretamente através do site.
Outra coisa notável:
.Você testou se o receptor for acionado, mas não é executado? (Coloque um sistema.Debugger.break (); na primeira linha.
irrelevante para a questão, mas apenas para manter as informações em um só lugar:
.notas para implementadores
Como um receptor de eventos deve ser registrado com a coleção do site antes de seus manipuladores podem ser executados, o Webadding e manipuladores webprovisioned não podem ser executados quando um site A coleção e seu site raiz são criados.
Ref: spwebeventreceriver.webprovisioned método
Se você souber pelo que seu objeto é apoiado, pode fazer isso sem usar pacotes.
Cerquilha
$obj = bless {}, 'Obj';
print ref $obj, "\n";
$obj = { %$obj };
print ref $obj, "\n";
Variedade
$obj = bless [], 'Obj';
print ref $obj , "\n";
$obj = [ @$obj ];
print ref $obj, "\n";
Escalar
$obj = bless \$a, "Obj";
print ref $obj, "\n";
$obj = \${ $$obj };
print ref $obj, "\n";
Atualizar: Obrigado, Ivan! Eu misturei módulos. Na verdade eu queria dar um link para Acme :: caramba :))
Ps Veja também Acme :: Sneeze :)
PPS Não tem uso real, é por isso que é Acme::
. Veja o post de Brian.