in reply to How can I unbless an object?
But isn't this already as simple as you could get? Here's the code I've played with:
Update: mp when you use the bless() operator on a hashref like so:
_____________________
And the output is:use Data::Dumper; my $bhash = bless { key1 => 'val1', key2 => 'val2' }, 'FOO'; my %uhash = %$bhash; print Dumper($bhash); print Dumper(\%uhash); print "done\n";
The bless() is used to associate the object a reference points to with a package that defines the object class. I am frankly not aware of any operator in Perl for 'curse' or 'unbless'.$VAR1 = bless( { 'key1' => 'val1', 'key2' => 'val2' }, 'FOO' ); $VAR1 = { 'key1' => 'val1', 'key2' => 'val2' }; done
Update: mp when you use the bless() operator on a hashref like so:
You end up 'labeling' or 'associating' the %ahash structure with the package 'FOO'. Here's the code to prove this:my %ahash = ( key1 => 1, key2 => 2 ); bless \%ahash, 'FOO';
Which when you run it produces this output:use Devel::Peek 'Dump'; use Data::Dumper; my %ahash = ( key1 => 'val1', key2 => 'val2' ); print "ORIGINAL HASH:\n"; print Dumper(\%ahash) ."\n"; print Dump(\%ahash) ."\n\n"; my $bhash = bless \%ahash, 'FOO'; print "ORIGINAL HASH (after blessing, note it's now been associated wi +th the 'FOO' package!!):\n"; print Dumper(\%ahash) ."\n"; print Dump(\%ahash) ."\n\n";
Note that soon after the call to the 'bless' operator, the original hash structure was altered. There's now been a new 'STASH' field added to the hash RV structure. Again, as far as I know there's no means in current version of Perl to simply yank that field from the underlying hash structure. I'll play some more with this to see if there's a way of obtaining an unblessed structure without unnecessary copying however.ORIGINAL HASH: $VAR1 = { 'key1' => 'val1', 'key2' => 'val2' }; SV = RV(0x3b828) at 0x2307c REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x2dbc4 SV = PVHV(0x8ea80) at 0x2dbc4 REFCNT = 2 FLAGS = (PADBUSY,PADMY,SHAREKEYS) IV = 2 NV = 0 ARRAY = 0x25160 (0:6, 1:2) hash quality = 150.0% KEYS = 2 FILL = 2 MAX = 7 RITER = -1 EITER = 0x0 Elt "key1" HASH = 0x3e4d49 SV = PV(0x23444) at 0x2316c REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x952b8 "val1"\0 CUR = 4 LEN = 5 Elt "key2" HASH = 0x3e4d4a SV = PV(0x2342c) at 0x23250 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x952e8 "val2"\0 CUR = 4 LEN = 5 ORIGINAL HASH (after blessing, note it's now been associated with the +'FOO' package!!): $VAR1 = bless( { 'key1' => 'val1', 'key2' => 'val2' }, 'FOO' ); SV = RV(0x3b828) at 0x2307c REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x2dbc4 SV = PVHV(0x8ea80) at 0x2dbc4 REFCNT = 3 FLAGS = (PADBUSY,PADMY,OBJECT,SHAREKEYS) IV = 2 NV = 0 STASH = 0x59b1c "FOO" ARRAY = 0x25160 (0:6, 1:2) hash quality = 150.0% KEYS = 2 FILL = 2 MAX = 7 RITER = -1 EITER = 0x0 Elt "key1" HASH = 0x3e4d49 SV = PV(0x23444) at 0x2316c REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x952b8 "val1"\0 CUR = 4 LEN = 5 Elt "key2" HASH = 0x3e4d4a SV = PV(0x2342c) at 0x23250 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x952e8 "val2"\0 CUR = 4 LEN = 5
_____________________
# Under Construction
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: How can I unbless an object?
by mp (Deacon) on Jul 19, 2002 at 18:28 UTC | |
by vladb (Vicar) on Jul 19, 2002 at 20:08 UTC | |
by mp (Deacon) on Jul 19, 2002 at 21:37 UTC |
In Section
Seekers of Perl Wisdom