Darf ich dich fragen, wie du die Vorzeichen der Tokens vergleichen willst, wenn du sie vorher rausschneidest? Bei meiner Version wurden sie automatisch direkt nach dem Vergleich rausgeschnitten und der Rest dann in das betreffende Array gepushed.
Das habe ich beim vierten Lesen endlich auch begriffen (boah, war das kompakt!), aber ein Vergleich mit s//-Operator-Seiteneffekt (phhh ...) war mir denn doch *etwas* zu kryptisch, also habe ich ihn durch
foreach my $one_token (@Token)
{
# Jetzt die "%20"-Markierungen wieder die "inneren" Leerzeichen
# zurückverwandeln
$one_token =~ s/%20/ /g;
# Vorzeichen wegfiltern, Token auf den passenden Stapel legen
if ($one_token =~ /^+(.*)/)
{ push @Must, $1; }
elsif ($one_token =~ /^-(.*)/)
{ push @Not, $1; }
else { push @Can, $one_token; }
}
usw. ersetzt.
(Ich hoffe, das geht noch halbwegs als Perl durch; mit anonymem $_ kann ich mich auch nicht so recht anfreunden - ich dachte, die Zeiten der Maschinensprache mit Akkumulatur und Registern sind langsam vorbei? :-)