0.19 -> 0.20
* New methods to_number/to_string replaced numerify/stringify.
Was:
my $e = Exception::Base->catch;
print $e->stringify(4);
print $e->numerify;
Should be:
my $e = Exception::Base->catch;
$e->verbosity = 4; # or: local $e->{verbosity} = 4;
print $e->to_string;
print $e->to_number;
* New attribute string_attributes replaced stringify_attributes.
Was:
use Exception::Base 'Exception::My' => {
has => 'myattr',
myattr => 'default',
stringify_attributes => ['message', 'myattr'],
};
Should be:
use Exception::Base 'Exception::My' => {
has => 'myattr',
myattr => 'default',
string_attributes => ['message', 'myattr'],
};
* Removed export of try/catch/throw methods and :all tag.
Was:
use Exception::Base ':all';
try eval { do_something };
if (catch my $e) {
print $e->message;
}
Should be:
use Exception::Base;
eval { do_something };
if ($@ and my $e = Exception::Base->catch) {
print $e->message;
}
* Removed method with.
Was:
my $e = Exception::Base->catch;
if ($e->with( 'message' )) { warn "default attribute" }
elsif ($e->with( -isa => ['Exception::Foo'] )) { warn "isa" }
elsif ($e->with( value => 9 )) { warn "value" }
elsif ($e->with( qr/^Error/ )) { warn "regexp" }
Should be:
my $e = Exception::Base->catch;
if ($e->matches( 'message' ) { warn "default attribute" }
elsif ($e->matches( ['Exception::Foo'] )) { warn "isa" }
elsif ($e->matches( { value => 9 } )) { warn "value" }
elsif ($e->matches( qr/^Error/ )) { warn "regexp" }
* Method catch takes no arguments.
Was:
my $status = Exception::Base->catch( my $e );
Should be:
my status = !!(my $e = Exception::Base->catch);
or:
Was:
if (catch my $e) {
...
};
Should be:
if ($@) {
my $e = Exception::Base->catch;
...
}
------------------------------------------------------------------------
0.16 -> 0.17
* The catch method doesn't rethrow a caught exception. The class name of static
method has no meaning and reference to array is no longer an argument for
the method.
Was:
eval { throw Exception::Base };
if ($@) {
my $e = Exception::System->catch;
# retrow anything else than Exception::System automatically
(...)
}
Should be:
eval { throw Exception::Base };
if ($@) {
my $e = Exception::Base->catch;
if ($e->isa('Exception::System') {
(...)
}
else {
$e->throw;
}
}
or:
Was:
try eval { throw Exception::Base };
if (catch my $e, ['Exception::System', 'Exception::Died']) {
# retrow anything else than Exception::System automatically
(...)
}
Should be:
eval { throw Exception::Base };
if ($@) {
my $e = Exception::Base->catch;
if ($e->with(-isa => ['Exception::System', 'Exception::Died'])) {
(...)
}
else {
$e->throw;
}
}
------------------------------------------------------------------------
0.15 -> 0.16
* The FIELD constant was renamed to ATTRS as far as every OO language calls it
attributes. All derived classes should use ATTRS constant instead of FIELD
constant.
Was:
use constant FIELDS => {
%{ Exception::Base->FIELDS },
message => { is => 'rw', default => 'Extended exception' },
myattr => { is => 'rw' },
};
Should be:
use constant ATTRS => {
%{ Exception::Base->ATTRS },
message => { is => 'rw', default => 'Extended exception' },
myattr => { is => 'rw' },
};
* An unknown attribute will be ignored instead to be part of properties
attribute. You can create additional exception class which supports these
attributes.
Was:
Exception::Base->throw(tag => 1, myattr => 2);
$@->with(tag => 1);
Should be:
use Exception::Base 'Exception::My' => { has => [ 'tag', 'myattr' ] };
Exception::My->throw(tag => 1, myattr => 2);
$@->with(tag => 1);
* Removed eval_error attribute. If the error stack is empty, the catch method
recover $@ variable into attribute pointed by eval_attribute.
Was:
try eval { die "Message" };
if (catch my $e) {
print $e->eval_error;
}
Should be:
try eval { die "Message" };
if (catch my $e) {
print $e->message;
}
* The catch method returns $@ variable if error stack is empty.
Was:
try eval { -f "/etc/shadow" or Exception::Base->throw() };
try eval { -f "/etc/passwd" or Exception::Base->throw() };
try eval { -f "/etc/passwd-" or Exception::Base->throw() };
while (catch my $e) {
do_something();
}
Should be:
try eval {
-f "/etc/shadow" or Exception::Base->throw();
-f "/etc/passwd" or Exception::Base->throw();
-f "/etc/passwd-" or Exception::Base->throw();
};
if (catch my $e) {
do_something();
}
* The _stringify private method renamed to __stringify. It might be important
for derived classes which overloads q{""}.
Was:
package Exception::My;
use base 'Exception::Base';
use overload 'q{""}' => '_stringify';
sub _stringify { return $_[0]->stringify; }
Should be:
use Exception::My;
use base 'Exception::Base';
use overload 'q{""}' => '__stringify';
sub __stringify { return $_[0]->stringify; }
------------------------------------------------------------------------
0.14 -> 0.15
* throw() method is exported with ":all" tag. It can break the code which
uses indirect notation.
Was:
throw Exception::Base message => 'Something happened';
Should be:
Exception::Base->throw( message => 'Something happened' );
or:
throw 'Exception::Base' => message => 'Something happened';
------------------------------------------------------------------------