… | |
… | |
162 | all, they are usually used to clean up after such exceptions. However, if |
162 | all, they are usually used to clean up after such exceptions. However, if |
163 | something truly exceptional is happening, a guard block should be allowed |
163 | something truly exceptional is happening, a guard block should be allowed |
164 | to die. Also, programming errors are a large source of exceptions, and the |
164 | to die. Also, programming errors are a large source of exceptions, and the |
165 | programmer certainly wants to know about those. |
165 | programmer certainly wants to know about those. |
166 | |
166 | |
167 | Since in most cases, the block executing when the guard gets executes does |
167 | Since in most cases, the block executing when the guard gets executed does |
168 | not know or does not care about the guard blocks, it makes little sense to |
168 | not know or does not care about the guard blocks, it makes little sense to |
169 | let containing code handle the exception. |
169 | let containing code handle the exception. |
170 | |
170 | |
171 | Therefore, whenever a guard block throws an exception, it will be caught, |
171 | Therefore, whenever a guard block throws an exception, it will be caught, |
172 | and this module will call the code reference stored in C<$Guard::DIED> |
172 | followed by calling the code reference stored in C<$Guard::DIED> (with |
173 | (with C<$@> set to the actual exception), which is similar to how most |
173 | C<$@> set to the actual exception), which is similar to how most event |
174 | event loops handle this case. |
174 | loops handle this case. |
175 | |
175 | |
176 | The default for C<$Guard::DIED> is to call C<warn "$@">. |
176 | The default for C<$Guard::DIED> is to call C<warn "$@">. |
177 | |
177 | |
178 | The C<$@> variable will be restored to its value before the guard call in |
178 | The C<$@> variable will be restored to its value before the guard call in |
179 | all cases, so guards will not disturb C<$@> in any way. |
179 | all cases, so guards will not disturb C<$@> in any way. |