Es gibt nur einen Zyklus.
Es sammelt alle Zeilen als Schlüssel in %l
, mit den Werten wie oft es es gesehen hat.
Wenn dies das erste Mal ist (… == 1
), ist es auf eine Kopie der aktuellen Zeile gestoßen, die es druckt.
Es funktioniert im Grunde das gleiche wie:
my %l;
for $*ARGFILES.lines() { # this is basically what `-n` does
++%l{ $_ }; # update the count
.say if %l{ $_ } == 1; # print it if this is the first time it was seen
}
Ich denke, der Grund … if ++$… == 1
statt … unless $…++
verwendet wurde, ist, dass &prefix:«++»
etwas performanter als &postfix:«++»
Eine andere potentiell effizienter (je auf die Implementierung von .unique
) Weg, es zu schreiben wäre:
perl6 -e '.put for $*ARGFILES.lines.unique' input-file.txt
Dank! Ich habe die Logik falsch verstanden, obwohl es in der Tat sehr einfach ist. –
Kein Aufruf von Zeilen auf '$ * ARGFILES', wenn Sie nur' lines() 'aufrufen, wird es bereits auf' $ * ARGFILES' operieren. – timotimo