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