demonstrate bless/cast order doesn't affect DESTROY versus magic destruction order
[p5sagit/Mutually-Assured-Destruction.git] / notes / destruction-order.pl
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5 use Variable::Magic qw(wizard cast);
6
7 BEGIN { package Foo; sub DESTROY { warn "in DESTROY\n"; } }
8
9 my $wiz = wizard data => sub { $_[1] },
10                  free => sub { warn "destroyed $_[1]!\n"; };
11
12 {
13   warn "Stanza 1\n";
14
15   my %foo;
16   
17   my $foo = \%foo;
18   
19   bless($foo, 'Foo');
20   
21   cast $foo, $wiz, '$foo';
22   cast %foo, $wiz, '%foo';
23
24 }
25
26 {
27   warn "Stanza 2\n";
28
29   my %foo;
30   
31   my $foo = \%foo;
32   
33   cast $foo, $wiz, '$foo';
34
35   cast %foo, $wiz, '%foo';
36   
37   bless($foo, 'Foo');
38
39 }
40
41 {
42   warn "Stanza 3\n";
43   
44   my $foo = do {
45     my %foo;
46     cast %foo, $wiz, '%foo';
47     \%foo;
48   };
49   
50   bless($foo, 'Foo');
51   
52   cast $foo, $wiz, '$foo';
53
54   undef($foo);
55
56   warn "End of block\n";
57
58 }