demonstrating how shit gets destroyed
[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";
28
29 my $foo = do {
30 my %foo;
31 cast %foo, $wiz, '%foo';
32 \%foo;
33 };
34
35 bless($foo, 'Foo');
36
37 cast $foo, $wiz, '$foo';
38
39 undef($foo);
40
41 warn "End of block\n";
42
43}