In fact, in my own code, I never put a semicolon after return
Interesting, and thanks all for comments. I do try to work through the source posted, and this might be my final version of highest_number for this thread. I finally worked out what the glitch was in getting the next number after 9. Abridged output, then source:
$ ./2.cw1.pl
...
object created, back with caller
word is 2.cw
dir2 is perlmonks
2.cw1.html
2.cw2.html
...
2.cw9.html
2.cw10.html
2.cw11.html
...
matching is 2.cw9.html
matching is 2.cw10.html
matching is 2.cw11.html
old num is 11
Make rus captions(y/n)?: n
...
Put file to server(y/n)?: y
server dir is perlmonks
...
return is 2.cw12.html
sub highest_number {
use 5.011;
my ( $aref, $filetype, $word ) = @_;
my $number;
my @matching;
my $ext = "." . $filetype;
push( @matching, 0 ); #min returned value
for my $file ( @{$aref} ) {
#print "file is $file\n";
if ( $file =~ /^$word(\d+)$ext$/ ) {
print "matching is $file\n";
push( @matching, $1 );
}
}
@matching = sort { $a <=> $b } @matching;
my $winner = pop @matching;
return $winner
}
I hadn't been sorting numerically. The existence of this page shows that the code works: resulting page.
What's funny is that I presented with an algorithm I was embarrassed to show, but with the mere addition of { $a <=> $b } and falling back to not having a semi-colon after the return, then I think this is pretty good, lexical perl. |