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

Comparing Guard/Guard.pm (file contents):
Revision 1.10 by root, Sat Dec 13 18:50:31 2008 UTC vs.
Revision 1.12 by root, Sat Dec 13 18:53:30 2008 UTC

133 133
134The advantage of doing this with a guard instead of simply calling C<< 134The advantage of doing this with a guard instead of simply calling C<<
135$sem->down >> in the callback is that you can opt not to create the timer, 135$sem->down >> in the callback is that you can opt not to create the timer,
136or your code can throw an exception before it can create the timer, or you 136or your code can throw an exception before it can create the timer, or you
137can create multiple timers or other event watchers and only when the last 137can create multiple timers or other event watchers and only when the last
138one gets executed will the lock be unlocked. 138one gets executed will the lock be unlocked. Using the C<guard>, you do
139not have to worry about catching all the places where you have to unlock
140the semaphore.
139 141
140=item Guard::cancel $guard 142=item Guard::cancel $guard
141 143
142Calling this function will "disable" the guard object returned by the 144Calling this function will "disable" the guard object returned by the
143C<guard> function, i.e. it will free the BLOCK originally passed to 145C<guard> function, i.e. it will free the BLOCK originally passed to
167Therefore, whenever a guard block throws an exception, it will be caught, 169Therefore, whenever a guard block throws an exception, it will be caught,
168and this module will call the code reference stored in C<$Guard::DIED> 170and this module will call the code reference stored in C<$Guard::DIED>
169(with C<$@> set to the actual exception), which is similar to how most 171(with C<$@> set to the actual exception), which is similar to how most
170event loops handle this case. 172event loops handle this case.
171 173
174The default for C<$Guard::DIED> is to call C<warn "$@">.
175
176The C<$@> variable will be restored to its value before the guard call in
177all cases, so guards will not disturb C<$@> in any way.
178
172The code reference stored in C<$Guard::DIED> should not die (behaviour is 179The code reference stored in C<$Guard::DIED> should not die (behaviour is
173not guaranteed, but right now, the exception will simply be ignored). 180not guaranteed, but right now, the exception will simply be ignored).
174
175The default for C<$Guard::DIED> is to call C<warn "$@">.
176 181
177=head1 AUTHOR 182=head1 AUTHOR
178 183
179 Marc Lehmann <schmorp@schmorp.de> 184 Marc Lehmann <schmorp@schmorp.de>
180 http://home.schmorp.de/ 185 http://home.schmorp.de/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines