File: cleanup.t

package info (click to toggle)
libcontextual-return-perl 0.003001-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 324 kB
  • ctags: 52
  • sloc: perl: 1,187; makefile: 2
file content (73 lines) | stat: -rw-r--r-- 1,800 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
use Contextual::Return;

sub bar {
    return 'in bar';
}

sub foo {
    return
        BOOL      { 0 }
        LIST      { 1,2,3 }
        NUM       { 42 }
        STR       { 'forty-two' }
        SCALAR    { 86 }
        SCALARREF { \7 }
        HASHREF   { { name => 'foo', value => 99} }
        ARRAYREF  { [3,2,1] }
        GLOBREF   { \*STDERR }
        CODEREF   { \&bar }
        CLEANUP   { Other::ok(1 => 'CLEANUP') }
    ;
}

package Other;
use Test::More tests=>27;

is_deeply [ ::foo() ], [1,2,3]                  => 'LIST context';

is do{ ::foo() ? 'true' : 'false' }, 'false'    => 'BOOLEAN context';

is 0+::foo(), 42                                => 'NUMERIC context';

is "".::foo(), 'forty-two'                      => 'STRING context';

is ${::foo}, 7                                  => 'SCALARREF context';

is_deeply \%{::foo()},
          { name => 'foo', value => 99}         => 'HASHREF context';

is_deeply \@{::foo()}, [3,2,1]                  => 'ARRAYREF context';

is \*{::foo()}, \*STDERR                        => 'GLOBREF context';

is ::foo->(), 'in bar'                          => 'ARRAYREF context';

$foo = ::foo();

is ${$foo}, 7                                  => 'SCALARREF via var';

$foo = undef;

my ($void, $tested);
sub side_effect {
    use Contextual::Return;
    return 
        BOOL { $tested = 1 }
        VOID { $void   = 1 }
        CLEANUP { $_ = 42 if $tested }
};

side_effect();

is $void, 1     => 'SIDE EFFECT VOID';
ok !defined $_  => 'NO ASSIGNMENT TO $_';

undef $void;

my $side_effect   = side_effect();
ok !defined $void => 'SIDE EFFECT NONVOID';
ok !defined $_    => 'NO ASSIGNMENT TO $_';

ok side_effect()  => 'SIDE EFFECT BOOLEAN';
ok !defined $void => 'SIDE EFFECT BOOLEAN NONVOID';
is $_, 42         => 'ASSIGNMENT TO $_';