… | |
… | |
13 | chdir "/etc"; |
13 | chdir "/etc"; |
14 | |
14 | |
15 | code_that_might_die_or_does_other_fun_stuff; |
15 | code_that_might_die_or_does_other_fun_stuff; |
16 | } |
16 | } |
17 | |
17 | |
|
|
18 | # create an object that, when the last reference to it is gone, |
|
|
19 | # invokes the given codeblock: |
|
|
20 | my $guard = guard { print "destroyed!\n" }; |
|
|
21 | undef $guard; # probably destroyed here |
|
|
22 | |
18 | =head1 DESCRIPTION |
23 | =head1 DESCRIPTION |
19 | |
24 | |
20 | This module implements so-called "guards". A guard is something (usually |
25 | This module implements so-called "guards". A guard is something (usually |
21 | an object) that "guards" a resource, ensuring that it is cleaned up when |
26 | an object) that "guards" a resource, ensuring that it is cleaned up when |
22 | expected. |
27 | expected. |
… | |
… | |
37 | package Guard; |
42 | package Guard; |
38 | |
43 | |
39 | no warnings; |
44 | no warnings; |
40 | |
45 | |
41 | BEGIN { |
46 | BEGIN { |
42 | $VERSION = '1.01'; |
47 | $VERSION = '1.021'; |
43 | @ISA = qw(Exporter); |
48 | @ISA = qw(Exporter); |
44 | @EXPORT = qw(guard scope_guard); |
49 | @EXPORT = qw(guard scope_guard); |
45 | |
50 | |
46 | require Exporter; |
51 | require Exporter; |
47 | |
52 | |