Hi Ovid,

On Wed, Apr 07, 2010 at 12:04:08AM -0700, Ovid wrote:
> --- On Wed, 7/4/10, Lutz Gehlen <lrg...@gmx.net> wrote:
> > What I need a central place for is the definition of the
> > actual 
> > error messages. With my module Exception::EasyThrow, I can
> > write at 
> > the beginning of my module:
> > 
> > use Exception::EasyThrow
> >     (var_ud => 'Variable %s is undefined. We
> > are doomed.',
> >      ... => ...);
> > 
> > and then later
> > 
> > var_ud('foo') if(!defined($foo));
> 
> Note, in your code above, you can still have different error
> messages in different packages.  You've made things a touch easier,
> but not really solved the underlying problem.

I usually handle this by having a central module defining the error
functions and offering them for import.

>  What about this proposal for Exception::Class?
> 
>   package My::Exceptions;
> 
>   use Exception::Class (
>       'MyException',
>       'IORead' => {
>           isa    => 'MyException',
>           alias  => 'throw_io_read',
>           format => [ 'Cannot open %s for reading: %s' ],
>       },
>   );
> 
> And then:
> 
>   use My::Exceptions 'throw_io_read';
> 
>   open my $fh, '<', $filename or throw_io_read $filename, $!;

I think that an inclusion into Exception::Class is definitely worth
thinking about. I even contacted Dave about it once, but I fear I
wasn't very clear about what I had in mind, so he suggested that I
publish my module first and he would consider it for
Exception::Class. Dave, what do you think about Ovid's suggestion?

One thing that always troubled me when I thought about a good way to
add my desired behaviour to Exception::Class and that is also an
issue with the 'format' suggestion is that I think that an own class
for each message might be a bit of an overkill. If I think of
exception hierarchies I rather think of a class like
My::Exception::IO (instead of IORead in your example). A read
failure would lead to an instance of the IO class with a message
about the read failure.

Therefore I went for a different way just for throwing the
exception. I don't claim to have made up my mind completely about
this. As mentioned before, I started this thread to raise a
discussion. But this is why I did not go your way so far.

Thanks for your comments,
Lutz

Reply via email to