This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
f25452f81a368bac1b5083b24c8438aa4bd50597
[perl5.git] / t / lib / warnings / pad
1   pad.c         AOK
2
3      "my" variable %s masks earlier declaration in same scope
4         my $x;
5         my $x ;
6
7      Variable "%s" will not stay shared 
8         sub x {
9             my $x;
10             sub y {
11                 sub { $x }
12             }
13         }
14
15         sub x {
16             my $x;
17             sub y {
18                 $x
19             }
20         }
21
22     "our" variable %s redeclared        (Did you mean "local" instead of "our"?)
23         our $x;
24         {
25             our $x;
26         }
27
28     %s never introduced         [pad_leavemy]   TODO
29     
30 __END__
31 # pad.c
32 use warnings 'misc' ;
33 my $x ;
34 my $x ;
35 my $y = my $y ;
36 my $p ;
37 package X ;
38 my $p ;
39 package main ;
40 no warnings 'misc' ;
41 my $x ;
42 my $y ;
43 my $p ;
44 EXPECT
45 "my" variable $x masks earlier declaration in same scope at - line 4.
46 "my" variable $y masks earlier declaration in same statement at - line 5.
47 "my" variable $p masks earlier declaration in same scope at - line 8.
48 ########
49 # pad.c
50 use warnings 'misc' ;
51 our $x ;
52 our $x ;
53 our $y = our $y ;
54 our $p ;
55 package X ;
56 our $p ;
57 EXPECT
58 ########
59 # pad.c
60 use warnings 'misc' ;
61 our $x ;
62 my $x ;
63 our $y = my $y ;
64 our $p ;
65 package X ;
66 my $p ;
67 package main ;
68 no warnings 'misc' ;
69 our $z ;
70 my $z ;
71 our $t = my $t ;
72 our $q ;
73 package X ;
74 my $q ;
75 EXPECT
76 "my" variable $x masks earlier declaration in same scope at - line 4.
77 "my" variable $y masks earlier declaration in same statement at - line 5.
78 "my" variable $p masks earlier declaration in same scope at - line 8.
79 ########
80 # pad.c
81 use warnings 'misc' ;
82 my $x ;
83 our $x ;
84 my $y = our $y ;
85 my $p ;
86 package X ;
87 our $p ;
88 package main ;
89 no warnings 'misc' ;
90 my $z ;
91 our $z ;
92 my $t = our $t ;
93 my $q ;
94 package X ;
95 our $q ;
96 EXPECT
97 "our" variable $x masks earlier declaration in same scope at - line 4.
98 "our" variable $y masks earlier declaration in same statement at - line 5.
99 "our" variable $p masks earlier declaration in same scope at - line 8.
100 ########
101 # pad.c
102 use warnings 'closure' ;
103 sub x {
104       my $x;
105       sub y {
106          $x
107       }
108    }
109 EXPECT
110 Variable "$x" will not stay shared at - line 7.
111 ########
112 # pad.c
113 no warnings 'closure' ;
114 sub x {
115       my $x;
116       sub y {
117          $x
118       }
119    }
120 EXPECT
121
122 ########
123 # pad.c
124 use warnings 'closure' ;
125 sub x {
126       my $x;
127       sub y {
128          sub { $x }
129       }
130    }
131 EXPECT
132 Variable "$x" will not stay shared at - line 6.
133 ########
134 # pad.c
135 use warnings 'closure' ;
136 sub x {
137     my $x;
138     sub {
139         $x;
140         sub y {
141             $x
142         }
143     }->();
144 }
145 EXPECT
146 Variable "$x" will not stay shared at - line 9.
147 ########
148 # pad.c
149 use warnings 'closure' ;
150 my $x;
151 sub {
152     $x;
153     sub f {
154         sub { $x }->();
155     }
156 }->();
157 EXPECT
158
159 ########
160 # pad.c
161 use warnings 'closure' ;
162 sub {
163     my $x;
164     sub f { $x }
165 }->();
166 EXPECT
167 Variable "$x" is not available at - line 5.
168 ########
169 # pad.c
170 use warnings 'closure' ;
171 sub {
172     my $x;
173     eval 'sub f { $x }';
174 }->();
175 EXPECT
176
177 ########
178 # pad.c
179 use warnings 'closure' ;
180 sub {
181     my $x;
182     sub f { eval '$x' }
183 }->();
184 f();
185 EXPECT
186 Variable "$x" is not available at (eval 1) line 2.
187 ########
188 # pad.c
189 use warnings 'closure' ;
190 sub x {
191       our $x;
192       sub y {
193          $x
194       }
195    }
196 EXPECT
197
198 ########
199 # pad.c
200 # see bugid 1754
201 use warnings 'closure' ;
202 sub f {
203     my $x;
204     sub { eval '$x' };
205 }
206 f()->();
207 EXPECT
208 Variable "$x" is not available at (eval 1) line 2.
209 ########
210 use warnings 'closure' ;
211 {
212     my $x = 1;
213     $y = \$x; # force abandonment rather than clear-in-place at scope exit
214     sub f2 { eval '$x' }
215 }
216 f2();
217 EXPECT
218 Variable "$x" is not available at (eval 1) line 2.
219 ########
220 use warnings 'closure' ;
221 for my $x (1,2,3) {
222     sub f { eval '$x' }
223     f();
224 }
225 f();
226 EXPECT
227 Variable "$x" is not available at (eval 4) line 2.
228 ########
229 # pad.c
230 no warnings 'closure' ;
231 sub x {
232       my $x;
233       sub y {
234          sub { $x }
235       }
236    }
237 EXPECT
238
239 ########
240 use warnings 'misc' ;
241 my $x;
242 {
243     my $x;
244 }
245 EXPECT
246 ########
247 use warnings 'misc' ;
248 our $x;
249 {
250     our $x;
251 }
252 EXPECT
253 "our" variable $x redeclared at - line 4.
254         (Did you mean "local" instead of "our"?)
255 ########
256 use warnings 'misc' ;
257 our $x;
258 {
259     my $x;
260 }
261 EXPECT
262 ########
263 use warnings 'misc' ;
264 my $x;
265 {
266     our $x;
267 }
268 EXPECT
269 ########
270 # an our var being introduced should suppress errors about global syms
271 use strict;
272 use warnings;
273 our $x unless $x;
274 EXPECT