ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Guard/Guard.pm
(Generate patch)

Comparing Guard/Guard.pm (file contents):
Revision 1.14 by root, Sat Dec 13 22:05:20 2008 UTC vs.
Revision 1.20 by root, Mon Jun 1 10:33:16 2009 UTC

10 # to go back to "/" no matter how myfun exits: 10 # to go back to "/" no matter how myfun exits:
11 sub myfun { 11 sub myfun {
12 scope_guard { chdir "/" }; 12 scope_guard { chdir "/" };
13 chdir "/etc"; 13 chdir "/etc";
14 14
15 call_function_that_might_die_or_other_fun_stuff; 15 code_that_might_die_or_does_other_fun_stuff;
16 } 16 }
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
17 22
18=head1 DESCRIPTION 23=head1 DESCRIPTION
19 24
20This module implements so-called "guards". A guard is something (usually 25This module implements so-called "guards". A guard is something (usually
21an object) that "guards" a resource, ensuring that it is cleaned up when 26an object) that "guards" a resource, ensuring that it is cleaned up when
37package Guard; 42package Guard;
38 43
39no warnings; 44no warnings;
40 45
41BEGIN { 46BEGIN {
42 $VERSION = '0.5'; 47 $VERSION = '1.02';
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
189=head1 THANKS 194=head1 THANKS
190 195
191Thanks to Marco Maisenhelder, who reminded me of the C<$Guard::DIED> 196Thanks to Marco Maisenhelder, who reminded me of the C<$Guard::DIED>
192solution to the problem of exceptions. 197solution to the problem of exceptions.
193 198
199=head1 SEE ALSO
200
201L<Scope::Guard> and L<Sub::ScopeFinalizer>, which actually implement
202dynamic, not scoped guards, and have a lot higher CPU, memory and typing
203overhead.
204
205L<Hook::Scope>, which has apparently never been finished and corrupts
206memory when used.
207
194=cut 208=cut
195 209

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines