1 pad.c AOK 2 3 "%s" 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 32use warnings 'shadow' ; 33my $x ; 34my $x ; 35my $y = my $y ; 36my $p ; 37package X ; 38my $p ; 39package main ; 40no warnings 'shadow' ; 41my $x ; 42my $y ; 43my $p ; 44EXPECT 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 50use feature 'state' ; 51use warnings 'shadow' ; 52our $x ; 53my $x ; 54state $x ; 55our $y = my $y ; 56our $p = state $p ; 57package X ; 58my $p ; 59package main ; 60no warnings 'shadow' ; 61our $z ; 62my $z ; 63our $t = my $t ; 64our $q = state $q ; 65package X ; 66my $q ; 67state $q; 68EXPECT 69"my" variable $x masks earlier declaration in same scope at - line 5. 70"state" variable $x masks earlier declaration in same scope at - line 6. 71"my" variable $y masks earlier declaration in same statement at - line 7. 72"state" variable $p masks earlier declaration in same statement at - line 8. 73"my" variable $p masks earlier declaration in same scope at - line 10. 74######## 75# pad.c 76use feature 'state' ; 77use warnings 'shadow'; 78state $x ; 79state $x ; 80my $x ; 81our $x ; 82state $y = state $y ; 83state $p = my $p ; 84state $z = our $z ; 85package X ; 86state $p ; 87package main ; 88no warnings 'shadow' ; 89state $x ; 90state $y ; 91state $p ; 92EXPECT 93"state" variable $x masks earlier declaration in same scope at - line 5. 94"my" variable $x masks earlier declaration in same scope at - line 6. 95"our" variable $x masks earlier declaration in same scope at - line 7. 96"state" variable $y masks earlier declaration in same statement at - line 8. 97"my" variable $p masks earlier declaration in same statement at - line 9. 98"our" variable $z masks earlier declaration in same statement at - line 10. 99"state" variable $p masks earlier declaration in same scope at - line 12. 100######## 101# pad.c 102use feature 'state'; 103use warnings 'shadow' ; 104my $x ; 105our $x ; 106state $x; 107my $y = our $y ; 108my $p = state $p ; 109package X ; 110our $p ; 111package main ; 112no warnings 'shadow' ; 113my $z ; 114our $z ; 115my $t = our $t ; 116my $z = state $z; 117my $q; 118state $q; 119package X ; 120our $q ; 121EXPECT 122"our" variable $x masks earlier declaration in same scope at - line 5. 123"state" variable $x masks earlier declaration in same scope at - line 6. 124"our" variable $y masks earlier declaration in same statement at - line 7. 125"state" variable $p masks earlier declaration in same statement at - line 8. 126"our" variable $p masks earlier declaration in same scope at - line 10. 127######## 128# pad.c 129use warnings 'closure' ; 130sub x { 131 my $x; 132 sub y { 133 $x 134 } 135 } 136EXPECT 137Variable "$x" will not stay shared at - line 7. 138######## 139# pad.c 140no warnings 'closure' ; 141sub x { 142 my $x; 143 sub y { 144 $x 145 } 146 } 147EXPECT 148 149######## 150# pad.c 151use warnings 'closure' ; 152sub x { 153 my $x; 154 sub y { 155 sub { $x } 156 } 157 } 158EXPECT 159Variable "$x" will not stay shared at - line 6. 160######## 161# pad.c 162use warnings 'closure' ; 163sub x { 164 my $x; 165 sub { 166 $x; 167 sub y { 168 $x 169 } 170 }->(); 171} 172EXPECT 173Variable "$x" will not stay shared at - line 9. 174######## 175# pad.c 176use warnings 'closure' ; 177my $x; 178sub { 179 $x; 180 sub f { 181 sub { $x }->(); 182 } 183}->(); 184EXPECT 185 186######## 187# pad.c 188use warnings 'closure' ; 189sub { 190 my $x; 191 sub f { $x } 192}->(); 193EXPECT 194Variable "$x" is not available at - line 5. 195######## 196# pad.c 197use warnings 'closure' ; 198sub { 199 my $x; 200 eval 'sub f { $x }'; 201}->(); 202EXPECT 203 204######## 205# pad.c 206use warnings 'closure' ; 207sub { 208 my $x; 209 sub f { eval '$x' } 210}->(); 211f(); 212EXPECT 213Variable "$x" is not available at (eval 1) line 1. 214######## 215# pad.c 216use warnings 'closure' ; 217sub x { 218 our $x; 219 sub y { 220 $x 221 } 222 } 223EXPECT 224 225######## 226# pad.c 227# see bugid 1754 228use warnings 'closure' ; 229sub f { 230 my $x; 231 sub { eval '$x' }; 232} 233f()->(); 234EXPECT 235Variable "$x" is not available at (eval 1) line 1. 236######## 237use warnings 'closure' ; 238{ 239 my $x = 1; 240 $y = \$x; # force abandonment rather than clear-in-place at scope exit 241 sub f2 { eval '$x' } 242} 243f2(); 244EXPECT 245Variable "$x" is not available at (eval 1) line 1. 246######## 247use warnings 'closure' ; 248for my $x (1,2,3) { 249 sub f { eval '$x' } 250 f(); 251} 252f(); 253EXPECT 254Variable "$x" is not available at (eval 4) line 1. 255######## 256# pad.c 257no warnings 'closure' ; 258sub x { 259 my $x; 260 sub y { 261 sub { $x } 262 } 263 } 264EXPECT 265 266######## 267# pad.c 268use warnings 'closure'; 269my $x; 270our $y; 271sub { $x = $y }->(); # should not warn about $y being unavailable 272EXPECT 273######## 274use warnings 'shadow' ; 275my $x; 276{ 277 my $x; 278} 279EXPECT 280######## 281# pad.c 282use warnings 'shadow' ; 283our $x ; 284our $x ; 285our $y = our $y ; 286our $p ; 287package X ; 288our $p ; 289package main ; 290no warnings 'shadow' ; 291our $a ; 292our $a ; 293our $b = our $b ; 294our $c ; 295package X ; 296our $c ; 297EXPECT 298"our" variable $x redeclared at - line 4. 299"our" variable $y redeclared at - line 5. 300######## 301use warnings 'shadow' ; 302our $x; 303{ 304 our $x; 305} 306our $x; 307no warnings 'shadow' ; 308our $y; 309{ 310 our $y; 311} 312our $y; 313EXPECT 314"our" variable $x redeclared at - line 4. 315 (Did you mean "local" instead of "our"?) 316"our" variable $x redeclared at - line 6. 317######## 318use warnings 'shadow' ; 319our $x; 320{ 321 my $x; 322} 323no warnings 'shadow' ; 324our $y; 325{ 326 my $y; 327} 328EXPECT 329######## 330use warnings 'shadow' ; 331my $x; 332{ 333 our $x; 334} 335no warnings 'shadow' ; 336my $y; 337{ 338 our $y; 339} 340EXPECT 341######## 342use warnings 'shadow' ; 343my $x; 344{ 345 my $x; 346} 347no warnings 'shadow' ; 348my $y; 349{ 350 my $y; 351} 352EXPECT 353######## 354# an our var being introduced should suppress errors about global syms 355use strict; 356use warnings; 357our $x unless $x; 358EXPECT 359######## 360use warnings 'shadow'; 361our $qunckkk; 362our $_; 363package clank_est; 364our $qunckkk; 365our $_; 366no warnings 'shadow'; 367our $ouch; 368our $_; 369package whack; 370our $ouch; 371our $_; 372EXPECT 373"our" variable $_ redeclared at - line 6. 374######## 375use warnings 'shadow'; 376BEGIN { binmode STDERR, 'utf8'; } 377{ 378 use utf8; 379 my $ニコニコ; 380 my $ニコニコ; 381} 382EXPECT 383"my" variable $ニコニコ masks earlier declaration in same scope at - line 6. 384######## 385use warnings 'shadow'; 386BEGIN { binmode STDERR, 'utf8'; } 387{ 388 use utf8; 389 my $thìs; 390 my $thìs; 391} 392EXPECT 393"my" variable $thìs masks earlier declaration in same scope at - line 6. 394######## 395# pad.c 396use warnings 'closure' ; 397BEGIN { binmode STDERR, 'utf8'; } 398sub { 399 use utf8; 400 my $è; 401 sub f { $è } 402}->(); 403EXPECT 404Variable "$è" is not available at - line 7. 405######## 406# pad.c 407use warnings 'closure' ; 408BEGIN { binmode STDERR, 'utf8'; } 409sub { 410 use utf8; 411 my $ニ; 412 sub f { $ニ } 413}->(); 414EXPECT 415Variable "$ニ" is not available at - line 7. 416######## 417# pad.c 418use warnings 'closure' ; 419BEGIN { binmode STDERR, 'utf8'; } 420sub x { 421 use utf8; 422 my $に; 423 sub y { 424 $に 425 } 426 } 427EXPECT 428Variable "$に" will not stay shared at - line 9. 429######## 430# pad.c 431use warnings 'closure' ; 432BEGIN { binmode STDERR, 'utf8'; } 433sub x { 434 use utf8; 435 my $に; 436 sub y { 437 sub { $に } 438 } 439 } 440EXPECT 441Variable "$に" will not stay shared at - line 8. 442######## 443# pad.c 444use warnings 'closure' ; 445BEGIN { binmode STDERR, 'utf8'; } 446sub x { 447 use utf8; 448 my $に; 449 sub { 450 $に; 451 sub y { 452 $に 453 } 454 }->(); 455} 456EXPECT 457Variable "$に" will not stay shared at - line 11. 458######## 459# pad.c 460use warnings 'closure' ; 461BEGIN { binmode STDERR, 'utf8'; } 462sub { 463 use utf8; 464 my $に; 465 sub f { $に } 466}->(); 467EXPECT 468Variable "$に" is not available at - line 7. 469######## 470# pad.c 471use warnings 'closure' ; 472BEGIN { binmode STDERR, 'utf8'; } 473sub { 474 use utf8; 475 my $に; 476 sub f { eval '$に' } 477}->(); 478f(); 479EXPECT 480Variable "$に" is not available at (eval 1) line 1. 481######## 482# pad.c 483# see bugid 1754 484use warnings 'closure' ; 485BEGIN { binmode STDERR, 'utf8'; } 486sub f { 487 use utf8; 488 my $に; 489 sub { eval '$に' }; 490} 491f()->(); 492EXPECT 493Variable "$に" is not available at (eval 1) line 1. 494######## 495use warnings 'closure' ; 496BEGIN { binmode STDERR, 'utf8'; } 497{ 498 use utf8; 499 my $に = 1; 500 $y = \$に; # force abandonment rather than clear-in-place at scope exit 501 sub f2 { eval '$に' } 502} 503f2(); 504EXPECT 505Variable "$に" is not available at (eval 1) line 1. 506######## 507use warnings 'closure' ; 508BEGIN { binmode STDERR, 'utf8'; } 509use utf8; 510for my $に (1,2,3) { 511 sub f { eval '$に' } 512 f(); 513} 514f(); 515EXPECT 516Variable "$に" is not available at (eval 4) line 1. 517######## 518# pad.c 519use warnings 'closure' ; 520BEGIN { binmode STDERR, 'utf8'; } 521sub x { 522 use utf8; 523 my $è; 524 sub y { 525 $è 526 } 527 } 528EXPECT 529Variable "$è" will not stay shared at - line 9. 530######## 531# pad.c 532use warnings 'closure' ; 533BEGIN { binmode STDERR, 'utf8'; } 534sub x { 535 use utf8; 536 my $è; 537 sub y { 538 sub { $è } 539 } 540 } 541EXPECT 542Variable "$è" will not stay shared at - line 8. 543######## 544# pad.c 545use warnings 'closure' ; 546BEGIN { binmode STDERR, 'utf8'; } 547sub x { 548 use utf8; 549 my $è; 550 sub { 551 $è; 552 sub y { 553 $è 554 } 555 }->(); 556} 557EXPECT 558Variable "$è" will not stay shared at - line 11. 559######## 560# pad.c 561use warnings 'closure' ; 562BEGIN { binmode STDERR, 'utf8'; } 563sub { 564 use utf8; 565 my $è; 566 sub f { $è } 567}->(); 568EXPECT 569Variable "$è" is not available at - line 7. 570######## 571# pad.c 572use warnings 'closure' ; 573BEGIN { binmode STDERR, 'utf8'; } 574sub { 575 use utf8; 576 my $è; 577 sub f { eval '$è' } 578}->(); 579f(); 580EXPECT 581Variable "$è" is not available at (eval 1) line 1. 582######## 583# pad.c 584# see bugid 1754 585use warnings 'closure' ; 586BEGIN { binmode STDERR, 'utf8'; } 587sub f { 588 use utf8; 589 my $è; 590 sub { eval '$è' }; 591} 592f()->(); 593EXPECT 594Variable "$è" is not available at (eval 1) line 1. 595######## 596use warnings 'closure' ; 597BEGIN { binmode STDERR, 'utf8'; } 598{ 599 use utf8; 600 my $è = 1; 601 $y = \$è; # force abandonment rather than clear-in-place at scope exit 602 sub f2 { eval '$è' } 603} 604f2(); 605EXPECT 606Variable "$è" is not available at (eval 1) line 1. 607######## 608use warnings 'closure' ; 609BEGIN { binmode STDERR, 'utf8'; } 610use utf8; 611for my $è (1,2,3) { 612 sub f { eval '$è' } 613 f(); 614} 615f(); 616EXPECT 617Variable "$è" is not available at (eval 4) line 1. 618######## 619