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?