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
74
75
76
77
78
79
80
|
#!perl
BEGIN {
chdir 't';
@INC = '../lib';
require './test.pl';
*bar::is = *is;
}
no warnings 'deprecated';
plan 22;
{
our sub foo { 42 }
is foo, 42, 'calling our sub from same package';
is &foo, 42, 'calling our sub from same package (amper)';
is do foo(), 42, 'calling our sub from same package (do)';
package bar;
sub bar::foo { 43 }
is foo, 42, 'calling our sub from another package';
is &foo, 42, 'calling our sub from another package (amper)';
is do foo(), 42, 'calling our sub from another package (do)';
}
package bar;
is foo, 43, 'our sub falling out of scope';
is &foo, 43, 'our sub falling out of scope (called via amper)';
is do foo(), 43, 'our sub falling out of scope (called via amper)';
package main;
{
sub bar::a { 43 }
our sub a {
if (shift) {
package bar;
is a, 43, 'our sub invisible inside itself';
is &a, 43, 'our sub invisible inside itself (called via amper)';
is do a(), 43, 'our sub invisible inside itself (called via do)';
}
42
}
a(1);
sub bar::b { 43 }
our sub b;
our sub b {
if (shift) {
package bar;
is b, 42, 'our sub visible inside itself after decl';
is &b, 42, 'our sub visible inside itself after decl (amper)';
is do b(), 42, 'our sub visible inside itself after decl (do)';
}
42
}
b(1)
}
sub c { 42 }
sub bar::c { 43 }
{
our sub c;
package bar;
is c, 42, 'our sub foo; makes lex alias for existing sub';
is &c, 42, 'our sub foo; makes lex alias for existing sub (amper)';
is do c(), 42, 'our sub foo; makes lex alias for existing sub (do)';
}
{
our sub d;
sub bar::d { 'd43' }
package bar;
sub d { 'd42' }
is eval ::d, 'd42', 'our sub foo; applies to subsequent sub foo {}';
}
{
our sub e ($);
is prototype "::e", '$', 'our sub with proto';
}
{
our sub if() { 42 }
my $x = if if if;
is $x, 42, 'lexical subs (even our) override all keywords';
package bar;
my $y = if if if;
is $y, 42, 'our subs from other packages override all keywords';
}
|