Commit | Line | Data |
9b657a62 |
1 | package Hints_pod_examples; |
2 | use strict; |
3 | use warnings; |
4 | |
5 | use base qw(Exporter); |
6 | |
7 | our %DOES = ( 'autodie::hints::provider' => 1 ); |
8 | |
9 | our @EXPORT_OK = qw( |
10 | undef_scalar false_scalar zero_scalar empty_list default_list |
11 | empty_or_false_list undef_n_error_list foo re_fail bar |
12 | think_positive my_system bizarro_system |
13 | ); |
14 | |
15 | use autodie::hints; |
16 | |
17 | sub AUTODIE_HINTS { |
18 | return { |
19 | # Scalar failures always return undef: |
20 | undef_scalar => { fail => undef }, |
21 | |
22 | # Scalar failures return any false value [default behaviour]: |
23 | false_scalar => { fail => sub { return ! $_[0] } }, |
24 | |
25 | # Scalar failures always return zero explicitly: |
26 | zero_scalar => { fail => '0' }, |
27 | |
28 | # List failures always return empty list: |
29 | # We never want these called in a scalar context |
30 | empty_list => { scalar => sub { 1 }, list => [] }, |
31 | |
32 | # List failures return C<()> or C<(undef)> [default expectation]: |
33 | default_list => { fail => sub { ! @_ || @_ == 1 && !defined $_[0] } }, |
34 | |
35 | # List failures return C<()> or a single false value: |
36 | empty_or_false_list => { fail => sub { ! @_ || @_ == 1 && !$_[0] } }, |
37 | |
38 | # List failures return (undef, "some string") |
39 | undef_n_error_list => { fail => sub { @_ == 2 && !defined $_[0] } }, |
40 | }; |
41 | } |
42 | |
43 | # Define some subs that all just return their arguments |
44 | sub undef_scalar { return wantarray ? @_ : $_[0] } |
45 | sub false_scalar { return wantarray ? @_ : $_[0] } |
46 | sub zero_scalar { return wantarray ? @_ : $_[0] } |
47 | sub empty_list { return wantarray ? @_ : $_[0] } |
48 | sub default_list { return wantarray ? @_ : $_[0] } |
49 | sub empty_or_false_list { return wantarray ? @_ : $_[0] } |
50 | sub undef_n_error_list { return wantarray ? @_ : $_[0] } |
51 | |
52 | |
53 | # Unsuccessful foo() returns 0 in all contexts... |
54 | autodie::hints->set_hints_for( |
55 | \&foo, |
56 | { |
57 | scalar => 0, |
58 | list => [0], |
59 | } |
60 | ); |
61 | |
62 | sub foo { return wantarray ? @_ : $_[0] } |
63 | |
64 | # Unsuccessful re_fail() returns 'FAIL' or '_FAIL' in scalar context, |
65 | # returns (-1) in list context... |
66 | autodie::hints->set_hints_for( |
67 | \&re_fail, |
68 | { |
69 | scalar => qr/^ _? FAIL $/xms, |
70 | list => [-1], |
71 | } |
72 | ); |
73 | |
74 | sub re_fail { return wantarray ? @_ : $_[0] } |
75 | |
76 | # Unsuccessful bar() returns 0 in all contexts... |
77 | autodie::hints->set_hints_for( |
78 | \&bar, |
79 | { |
80 | scalar => 0, |
81 | list => [0], |
82 | } |
83 | ); |
84 | |
85 | sub bar { return wantarray ? @_ : $_[0] } |
86 | |
87 | # Unsuccessful think_positive() returns negative number on failure... |
88 | autodie::hints->set_hints_for( |
89 | \&think_positive, |
90 | { |
91 | scalar => sub { $_[0] < 0 }, |
92 | list => sub { $_[0] < 0 }, |
93 | } |
94 | ); |
95 | |
96 | sub think_positive { return wantarray ? @_ : $_[0] } |
97 | |
98 | # Unsuccessful my_system() returns non-zero on failure... |
99 | autodie::hints->set_hints_for( |
100 | \&my_system, |
101 | { |
102 | scalar => sub { $_[0] != 0 }, |
103 | list => sub { $_[0] != 0 }, |
104 | } |
105 | ); |
106 | sub my_system { return wantarray ? @_ : $_[0] }; |
107 | |
108 | 1; |