The code below shows that failure, plus the fixed version, plus the working counter-based solution.
#!perl
use 5.012; # strict, //
use warnings;
my $favorites = join '~~~', map("t|k|$_", 1..30); # create data for SS
+CCE
print "initial favorites: $favorites\n";
print "="x40, "\n";
#####################################
{
print qq#This was my original: it doesn't quite work, because the
+25th will contain _all_ the remaining text \n#;
my @favs = split /~~~/,$favorites,25;
my $favnums = "";
foreach (@favs){
next unless defined;
printf "fav: %s\t", $_;
my ($favtitle,$favlink,$favnum) = split /\|/,$_; # you
+had the wrong split expression; you only need one pipe in the split
$favnums = $favnum . "," . $favnums;
print "partial favnums: $favnums\n";
}
print "WRONG FOR 25+: favnums: $favnums\n";
print "="x40, "\n";
}
#####################################
{
print qq#This tweaks the limit\n#;
my @favs = split /~~~/,$favorites,26;
$#favs = 24 if @favs>25; # clips it to 25, so it throws away th
+e 26th entry if there was one
my $favnums = "";
foreach (@favs){
next unless defined;
printf "fav: %s\t", $_;
my ($favtitle,$favlink,$favnum) = split /\|/,$_; # you
+had the wrong split expression; you only need one pipe in the split
$favnums = $favnum . "," . $favnums;
print "partial favnums: $favnums\n";
}
print "CORRECT LIMIT+TRIM: final favnums: $favnums\n";
print "="x40, "\n";
}
#####################################
{
print qq#This uses the counter\n#;
my @favs = split /~~~/,$favorites;
my $favnums = "";
foreach (@favs){
state $counter = 0;
last if $counter++ >= 25;
printf "fav: %s\t", $_;
my ($favtitle,$favlink,$favnum) = split /\|/,$_; # you
+had the wrong split expression; you only need one pipe in the split
$favnums = $favnum . "," . $favnums;
print "partial favnums: $favnums\n";
}
print "CORRECT COUNTER-based: final favnums: $favnums\n";
print "="x40, "\n";
}
__END__
initial favorites: t|k|1~~~t|k|2~~~t|k|3~~~t|k|4~~~t|k|5~~~t|k|6~~~t|k
+|7~~~t|k|8~~~t|k|9~~~t|k|10~~~t|k|11~~~t|k|12~~~t|k|13~~~t|k|14~~~t|k
+|15~~~t|k|16~~~t|k|17~~~t|k|18~~~t|k|19~~~t|k|20~~~t|k|21~~~t|k|22~~~
+t|k|23~~~t|k|24~~~t|k|25~~~t|k|26~~~t|k|27~~~t|k|28~~~t|k|29~~~t|k|30
========================================
This was my original: it doesn't quite work, because the 25th will con
+tain _all_ the remaining text
fav: t|k|1 partial favnums: 1,
fav: t|k|2 partial favnums: 2,1,
fav: t|k|3 partial favnums: 3,2,1,
fav: t|k|4 partial favnums: 4,3,2,1,
fav: t|k|5 partial favnums: 5,4,3,2,1,
fav: t|k|6 partial favnums: 6,5,4,3,2,1,
fav: t|k|7 partial favnums: 7,6,5,4,3,2,1,
fav: t|k|8 partial favnums: 8,7,6,5,4,3,2,1,
fav: t|k|9 partial favnums: 9,8,7,6,5,4,3,2,1,
fav: t|k|10 partial favnums: 10,9,8,7,6,5,4,3,2,1,
fav: t|k|11 partial favnums: 11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|12 partial favnums: 12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|13 partial favnums: 13,12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|14 partial favnums: 14,13,12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|15 partial favnums: 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|16 partial favnums: 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
+,
fav: t|k|17 partial favnums: 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,
+2,1,
fav: t|k|18 partial favnums: 18,17,16,15,14,13,12,11,10,9,8,7,6,5,4
+,3,2,1,
fav: t|k|19 partial favnums: 19,18,17,16,15,14,13,12,11,10,9,8,7,6,
+5,4,3,2,1,
fav: t|k|20 partial favnums: 20,19,18,17,16,15,14,13,12,11,10,9,8,7
+,6,5,4,3,2,1,
fav: t|k|21 partial favnums: 21,20,19,18,17,16,15,14,13,12,11,10,9,
+8,7,6,5,4,3,2,1,
fav: t|k|22 partial favnums: 22,21,20,19,18,17,16,15,14,13,12,11,10
+,9,8,7,6,5,4,3,2,1,
fav: t|k|23 partial favnums: 23,22,21,20,19,18,17,16,15,14,13,12,11
+,10,9,8,7,6,5,4,3,2,1,
fav: t|k|24 partial favnums: 24,23,22,21,20,19,18,17,16,15,14,13,12
+,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|25~~~t|k|26~~~t|k|27~~~t|k|28~~~t|k|29~~~t|k|30 partial fa
+vnums: 25~~~t,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,
+4,3,2,1,
WRONG FOR 25+: favnums: 25~~~t,24,23,22,21,20,19,18,17,16,15,14,13,12,
+11,10,9,8,7,6,5,4,3,2,1,
========================================
This tweaks the limit
fav: t|k|1 partial favnums: 1,
fav: t|k|2 partial favnums: 2,1,
fav: t|k|3 partial favnums: 3,2,1,
fav: t|k|4 partial favnums: 4,3,2,1,
fav: t|k|5 partial favnums: 5,4,3,2,1,
fav: t|k|6 partial favnums: 6,5,4,3,2,1,
fav: t|k|7 partial favnums: 7,6,5,4,3,2,1,
fav: t|k|8 partial favnums: 8,7,6,5,4,3,2,1,
fav: t|k|9 partial favnums: 9,8,7,6,5,4,3,2,1,
fav: t|k|10 partial favnums: 10,9,8,7,6,5,4,3,2,1,
fav: t|k|11 partial favnums: 11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|12 partial favnums: 12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|13 partial favnums: 13,12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|14 partial favnums: 14,13,12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|15 partial favnums: 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|16 partial favnums: 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
+,
fav: t|k|17 partial favnums: 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,
+2,1,
fav: t|k|18 partial favnums: 18,17,16,15,14,13,12,11,10,9,8,7,6,5,4
+,3,2,1,
fav: t|k|19 partial favnums: 19,18,17,16,15,14,13,12,11,10,9,8,7,6,
+5,4,3,2,1,
fav: t|k|20 partial favnums: 20,19,18,17,16,15,14,13,12,11,10,9,8,7
+,6,5,4,3,2,1,
fav: t|k|21 partial favnums: 21,20,19,18,17,16,15,14,13,12,11,10,9,
+8,7,6,5,4,3,2,1,
fav: t|k|22 partial favnums: 22,21,20,19,18,17,16,15,14,13,12,11,10
+,9,8,7,6,5,4,3,2,1,
fav: t|k|23 partial favnums: 23,22,21,20,19,18,17,16,15,14,13,12,11
+,10,9,8,7,6,5,4,3,2,1,
fav: t|k|24 partial favnums: 24,23,22,21,20,19,18,17,16,15,14,13,12
+,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|25 partial favnums: 25,24,23,22,21,20,19,18,17,16,15,14,13
+,12,11,10,9,8,7,6,5,4,3,2,1,
CORRECT LIMIT+TRIM: final favnums: 25,24,23,22,21,20,19,18,17,16,15,14
+,13,12,11,10,9,8,7,6,5,4,3,2,1,
========================================
This uses the counter
fav: t|k|1 partial favnums: 1,
fav: t|k|2 partial favnums: 2,1,
fav: t|k|3 partial favnums: 3,2,1,
fav: t|k|4 partial favnums: 4,3,2,1,
fav: t|k|5 partial favnums: 5,4,3,2,1,
fav: t|k|6 partial favnums: 6,5,4,3,2,1,
fav: t|k|7 partial favnums: 7,6,5,4,3,2,1,
fav: t|k|8 partial favnums: 8,7,6,5,4,3,2,1,
fav: t|k|9 partial favnums: 9,8,7,6,5,4,3,2,1,
fav: t|k|10 partial favnums: 10,9,8,7,6,5,4,3,2,1,
fav: t|k|11 partial favnums: 11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|12 partial favnums: 12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|13 partial favnums: 13,12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|14 partial favnums: 14,13,12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|15 partial favnums: 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,
fav: t|k|16 partial favnums: 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
+,
fav: t|k|17 partial favnums: 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,
+2,1,
fav: t|k|18 partial favnums: 18,17,16,15,14,13,12,11,10,9,8,7,6,5,4
+,3,2,1,
fav: t|k|19 partial favnums: 19,18,17,16,15,14,13,12,11,10,9,8,7,6,
+5,4,3,2,1,
fav: t|k|20 partial favnums: 20,19,18,17,16,15,14,13,12,11,10,9,8,7
+,6,5,4,3,2,1,
fav: t|k|21 partial favnums: 21,20,19,18,17,16,15,14,13,12,11,10,9,
+8,7,6,5,4,3,2,1,
fav: t|k|22 partial favnums: 22,21,20,19,18,17,16,15,14,13,12,11,10
+,9,8,7,6,5,4,3,2,1,
fav: t|k|23 partial favnums: 23,22,21,20,19,18,17,16,15,14,13,12,11
+,10,9,8,7,6,5,4,3,2,1,
fav: t|k|25 partial favnums: 25,24,23,22,21,20,19,18,17,16,15,14,13
+,12,11,10,9,8,7,6,5,4,3,2,1,
CORRECT COUNTER-based: final favnums: 25,24,23,22,21,20,19,18,17,16,15
+,14,13,12,11,10,9,8,7,6,5,4,3,2,1,
========================================