http://qs1969.pair.com?node_id=11144613

ibm1620 has asked for the wisdom of the Perl Monks concerning the following question:

I installed perl 5.36.0 and I tried updating my starting "template" to use v5.36; rather than use 5.010;:
#!/usr/bin/env perl use v5.36; # was 'use 5.010;' #use warnings; # unnecessary now! use strict; no if $] >= 5.018, warnings => "experimental::smartmatch"; use Getopt::Std; my %opts; getopts( 'hvi:', \%opts ) or die "getopts failed\n"; my $verbose; my $infile; while ( my ( $k, $v ) = each %opts ) { given ($k) { # <-- line 13 when ('h') { ...; } when ('v') { ++$verbose; } when ('i') { $infile = $v; } default { die "*** BUG: no handler for -$k.\n"; } } }
It now gets the following compilation errors:
syntax error at /Users/chap/private/perl/t0 line 13, near ") {" syntax error at /Users/chap/private/perl/t0 line 15, near ") {" Global symbol "$v" requires explicit package name (did you forget to d +eclare "my $v"?) at /Users/chap/private/perl/t0 line 16. Execution of /Users/chap/private/perl/t0 aborted due to compilation er +rors.
I know that given is still experimental (and unpopular), but I thought it was still supported by 5.36. Also, suddenly missing the declaration of $v is weird. Anyone know what's going on?

Update: also, what would be the modern way to write that loop?