return join " ", grep {$_ <= $n} @primes;
This use of grep will iterate over the entire list of @primes even after the $n limit is encountered. This is not a problem for a list of the first fifteen primes, but might be for the first 15 million primes! One way to mitigate this overhead would be with the List::MoreUtils::last_index() function:
c:\@Work\Perl\monks>perl -le "use warnings; use strict; ;; use List::MoreUtils qw(last_index); ;; my @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47) +; print qq{primes: @primes}; ;; sub listprimes { my ($n) = @_; ;; my $last_i = last_index { $_ <= $n } @primes; ;; return join ' ', @primes[ 0 .. $last_i ]; } ;; sub random { my ($lo, $hi) = @_; return $lo + int rand $hi - $lo + 1; } ;; for (1 .. 5) { my $r = random(10, 50); my $f = listprimes($r); print qq{r == $r: $f}; } " primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 r == 50: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 r == 32: 2 3 5 7 11 13 17 19 23 29 31 r == 18: 2 3 5 7 11 13 17 r == 47: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 r == 25: 2 3 5 7 11 13 17 19 23
Give a man a fish: <%-{-{-{-<
In reply to Re^2: Perl program - I hope I can more understand my code
by AnomalousMonk
in thread Perl program - I hope I can more understand my code
by brianphan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |