Commit | Line | Data |
a687059c |
1 | #!./perl |
2 | |
79072805 |
3 | # $RCSfile: local.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:04 $ |
a687059c |
4 | |
161b7d16 |
5 | print "1..36\n"; |
a687059c |
6 | |
7 | sub foo { |
8 | local($a, $b) = @_; |
9 | local($c, $d); |
10 | $c = "ok 3\n"; |
11 | $d = "ok 4\n"; |
12 | { local($a,$c) = ("ok 9\n", "ok 10\n"); ($x, $y) = ($a, $c); } |
13 | print $a, $b; |
14 | $c . $d; |
15 | } |
16 | |
17 | $a = "ok 5\n"; |
18 | $b = "ok 6\n"; |
19 | $c = "ok 7\n"; |
20 | $d = "ok 8\n"; |
21 | |
93a17b20 |
22 | print &foo("ok 1\n","ok 2\n"); |
a687059c |
23 | |
24 | print $a,$b,$c,$d,$x,$y; |
25 | |
26 | # same thing, only with arrays and associative arrays |
27 | |
28 | sub foo2 { |
29 | local($a, @b) = @_; |
30 | local(@c, %d); |
31 | @c = "ok 13\n"; |
32 | $d{''} = "ok 14\n"; |
33 | { local($a,@c) = ("ok 19\n", "ok 20\n"); ($x, $y) = ($a, @c); } |
34 | print $a, @b; |
35 | $c[0] . $d{''}; |
36 | } |
37 | |
38 | $a = "ok 15\n"; |
39 | @b = "ok 16\n"; |
40 | @c = "ok 17\n"; |
41 | $d{''} = "ok 18\n"; |
42 | |
93a17b20 |
43 | print &foo2("ok 11\n","ok 12\n"); |
a687059c |
44 | |
45 | print $a,@b,@c,%d,$x,$y; |
706a304b |
46 | |
47 | eval 'local($$e)'; |
48 | print +($@ =~ /Can't localize through a reference/) ? "" : "not ", "ok 21\n"; |
49 | |
50 | eval 'local(@$e)'; |
51 | print +($@ =~ /Can't localize through a reference/) ? "" : "not ", "ok 22\n"; |
52 | |
53 | eval 'local(%$e)'; |
54 | print +($@ =~ /Can't localize through a reference/) ? "" : "not ", "ok 23\n"; |
85aff577 |
55 | |
56 | # check for scope leakage |
161b7d16 |
57 | |
85aff577 |
58 | $a = 'outer'; |
59 | if (1) { local $a = 'inner' } |
60 | print +($a eq 'outer') ? "" : "not ", "ok 24\n"; |
61 | |
301d9039 |
62 | # see if localization works when scope unwinds |
63 | |
64 | local $m = 5; |
65 | eval { |
66 | for $m (6) { |
67 | local $m = 7; |
68 | die "bye"; |
69 | } |
70 | }; |
71 | print $m == 5 ? "" : "not ", "ok 25\n"; |
161b7d16 |
72 | |
73 | # Array and hash elements |
74 | |
75 | @a = ('a', 'b', 'c'); |
76 | { |
77 | local($a[1]) = 'foo'; |
78 | local($a[2]) = $a[2]; |
79 | print +($a[1] eq 'foo') ? "" : "not ", "ok 26\n"; |
80 | print +($a[2] eq 'c') ? "" : "not ", "ok 27\n"; |
81 | undef @a; |
82 | } |
83 | print +($a[1] eq 'b') ? "" : "not ", "ok 28\n"; |
84 | print +($a[2] eq 'c') ? "" : "not ", "ok 29\n"; |
85 | print +(!defined $a[0]) ? "" : "not ", "ok 30\n"; |
86 | |
87 | @a = ('a', 'b', 'c'); |
88 | { |
89 | local($a[1]) = "X"; |
90 | shift @a; |
91 | } |
92 | print +($a[0].$a[1] eq "Xb") ? "" : "not ", "ok 31\n"; |
93 | |
94 | %h = ('a' => 1, 'b' => 2, 'c' => 3); |
95 | { |
96 | local($h{'a'}) = 'foo'; |
97 | local($h{'b'}) = $h{'b'}; |
98 | print +($h{'a'} eq 'foo') ? "" : "not ", "ok 32\n"; |
99 | print +($h{'b'} == 2) ? "" : "not ", "ok 33\n"; |
100 | local($h{'c'}); |
101 | delete $h{'c'}; |
102 | } |
103 | print +($h{'a'} == 1) ? "" : "not ", "ok 34\n"; |
104 | print +($h{'b'} == 2) ? "" : "not ", "ok 35\n"; |
105 | print +($h{'c'} == 3) ? "" : "not ", "ok 36\n"; |