I suggest using subclasses rather than trying to differentiate your
exceptions through 'fields'.
if ( my $e = X::Class::SubClass1->caught ) {
# handle
}
elsif ( my $e = X::Class::SubClass2->caught ) {
# handle
}
In each block, the above code directly describes the type of error
that it handles --- I think using 'fields' requires the reader to work
a little harder to understand what is going on. That said, I
recommend not getting carried away with defining complex exception
hierarchies. Start with a simple
X::Class->caught and
subclass only as required by your application.