in reply to replacing literals with constants
Deparsing the code shows what Perl sees (in tmp.pl):
#!/usr/bin/perl -w use strict; sub ten { 10 } print "9 .. 10 - 1 with constant\n"; for my $i (9 .. ten - 1) { print $i, "\n"; } print "-> unexpected\n\n";
gives when deparsed:
corion@outerlimits:~/Projekte$ perl -MO=Deparse tmp.pl BEGIN { $^W = 1; } use strict; sub ten { 10; } print "9 .. 10 - 1 with constant\n"; foreach my $i (9 .. ten(-1)) { print $i, "\n"; } print "-> unexpected\n\n"; tmp.pl syntax OK
Since you don't have a prototype on your constant, the -1 gets interpreted as an argument to your subroutine call ten. The fix is to use a prototype, or to use the constant module, which does the same:
sub ten() { 10 };
... or ...
use constant ten => 10;
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: replacing literals with constants
by hexcoder (Curate) on May 14, 2022 at 09:20 UTC | |
by kcott (Archbishop) on May 14, 2022 at 13:17 UTC | |
by LanX (Saint) on May 14, 2022 at 22:35 UTC |