Commit | Line | Data |
98478aff |
1 | #!perl |
2 | use strict; |
3 | use warnings; |
4 | use Test::More; |
5 | |
6 | use Function::Parameters; |
7 | |
8 | fun foo ($x, $y = 5) { |
9 | return $x + $y; |
10 | } |
11 | |
12 | is(foo(3, 4), 7); |
13 | is(foo(3), 8); |
14 | { |
15 | my $warning; |
16 | local $SIG{__WARN__} = sub { $warning = $_[0] }; |
17 | is(foo, 5); |
18 | like($warning, qr/Use of uninitialized value \$x in addition \(\+\)/); |
19 | } |
20 | |
21 | fun bar ($baz, $quux = foo(1) * 2, $blorg = sub { return "ran sub, got " . $_[0] }) { |
22 | $blorg->($baz + $quux); |
23 | } |
24 | |
25 | is(bar(3, 4, sub { $_[0] }), 7); |
26 | is(bar(5, 6), "ran sub, got 11"); |
27 | is(bar(7), "ran sub, got 19"); |
28 | { |
29 | my $warning; |
30 | local $SIG{__WARN__} = sub { $warning = $_[0] }; |
31 | is(bar, "ran sub, got 12"); |
32 | like($warning, qr/Use of uninitialized value \$baz in addition \(\+\)/); |
33 | } |
34 | |
35 | fun baz ($a, $b = our $FOO) { |
36 | return "$a $b"; |
37 | } |
38 | |
39 | { |
40 | no warnings 'misc'; # 'not imported' warning because we use $FOO later |
41 | eval '$FOO'; |
42 | like($@, qr/Global symbol "\$FOO" requires explicit package name/, "doesn't leak scope"); |
43 | } |
44 | |
45 | our $FOO = "abc"; |
46 | is(baz("123"), "123 abc"); |
47 | |
48 | fun goorch ($x, $y = []) { |
49 | return $y |
50 | } |
51 | |
52 | my $goorch_y_1 = goorch( 10 ); |
53 | my $goorch_y_2 = goorch( 10 ); |
54 | |
55 | isnt($goorch_y_1, $goorch_y_2, '... not the same reference'); |
56 | |
57 | done_testing; |