I think the key thing is the use of "if not defined" instead of a numeric/Boolean comparison. A 0 or 1 start for loop doesn't matter (0,1,2,3) or (1,2,3), and actually $count and $max in the sub() don't really either as far as the sub is concerned except that those factors limit the number of times the sub is called in the for() loop. In the OP's code using 1..$max calls the sub 3 times, using 0..$max calls it 4 times.
#!/usr/bin/perl
use 5.014;
use strict;
use warnings;
use autodie;
my @arrX = (0,4194304,8388608);
my $count = 0; #makes no difference in sub
my $max = 300; #makes no difference in sub
sub sendX {
my ($data) = shift @arrX;
return if not defined $data; # use defined, not numeric/boolea
+n
say $data;
}
for (1 .. $max) { #could be 1 .. scalar(@arrX)???
sendX;
}
__END__
Prints:
0
4194304
8388608
I am also a bit mystified as to how this relates to some purpose.