Pergunta

A partir de Perldoc -f abençoe:

bless REF,CLASSNAME

Esta função diz a coisa referenciada por REF que é agora
um objeto no CLASSNAME pacote.

Existe alguma maneira de obter uma estrutura não abençoada sem cópia desnecessária?

Foi útil?

Solução

Data :: Structure :: UTIL

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

    .
  1. direitos adequados do usuário que executa o comando poder shell.

  2. 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";

Acme :: Maldição :)

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top