our
%DOES
= (
'autodie::hints::provider'
=> 1 );
our
@EXPORT_OK
=
qw(
undef_scalar false_scalar zero_scalar empty_list default_list
empty_or_false_list undef_n_error_list foo re_fail bar
think_positive my_system bizarro_system
)
;
sub
AUTODIE_HINTS {
return
{
undef_scalar
=> {
fail
=>
sub
{ !
defined
(
$_
[0]) } },
false_scalar
=> {
fail
=>
sub
{
return
!
$_
[0] } },
zero_scalar
=> {
fail
=>
sub
{
defined
(
$_
[0]) &&
$_
[0] eq
'0'
} },
empty_list
=> {
scalar
=>
sub
{ 1 },
list
=>
sub
{ !
@_
} },
default_list
=> {
fail
=>
sub
{ !
@_
||
@_
== 1 && !
defined
$_
[0] } },
empty_or_false_list
=> {
fail
=>
sub
{ !
@_
||
@_
== 1 && !
$_
[0] } },
undef_n_error_list
=> {
fail
=>
sub
{
@_
== 2 && !
defined
$_
[0] } },
};
}
sub
undef_scalar {
return
wantarray
?
@_
:
$_
[0] }
sub
false_scalar {
return
wantarray
?
@_
:
$_
[0] }
sub
zero_scalar {
return
wantarray
?
@_
:
$_
[0] }
sub
empty_list {
return
wantarray
?
@_
:
$_
[0] }
sub
default_list {
return
wantarray
?
@_
:
$_
[0] }
sub
empty_or_false_list {
return
wantarray
?
@_
:
$_
[0] }
sub
undef_n_error_list {
return
wantarray
?
@_
:
$_
[0] }
autodie::hints->set_hints_for(
\
&foo
,
{
scalar
=>
sub
{
defined
(
$_
[0]) &&
$_
[0] == 0 },
list
=>
sub
{
@_
== 1 &&
defined
(
$_
[0]) &&
$_
[0] == 0 },
}
);
sub
foo {
return
wantarray
?
@_
:
$_
[0] }
autodie::hints->set_hints_for(
\
&re_fail
,
{
scalar
=>
qr/^ _? FAIL $/
xms,
list
=>
sub
{
@_
== 1 &&
$_
[0] eq -1 },
}
);
sub
re_fail {
return
wantarray
?
@_
:
$_
[0] }
autodie::hints->set_hints_for(
\
&bar
,
{
scalar
=>
sub
{
defined
(
$_
[0]) &&
$_
[0] == 0 },
list
=>
sub
{
@_
== 1 &&
defined
(
$_
[0]) &&
$_
[0] == 0 },
}
);
sub
bar {
return
wantarray
?
@_
:
$_
[0] }
autodie::hints->set_hints_for(
\
&think_positive
,
{
scalar
=>
sub
{
$_
[0] < 0 },
list
=>
sub
{
$_
[0] < 0 },
}
);
sub
think_positive {
return
wantarray
?
@_
:
$_
[0] }
autodie::hints->set_hints_for(
\
&my_system
,
{
scalar
=>
sub
{
$_
[0] != 0 },
list
=>
sub
{
$_
[0] != 0 },
}
);
sub
my_system {
return
wantarray
?
@_
:
$_
[0] };
1;