demonstrate bless/cast order doesn't affect DESTROY versus magic destruction order
[p5sagit/Mutually-Assured-Destruction.git] / notes / destruction-order.pl
CommitLineData
9a254f60 1#!/usr/bin/env perl
2
3use strict;
4use warnings;
5use Variable::Magic qw(wizard cast);
6
7BEGIN { package Foo; sub DESTROY { warn "in DESTROY\n"; } }
8
9my $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";
6c760df7 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";
9a254f60 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}