W takim przypadku należy użyć dodatkowej tablicy do przechowania obliczonych wyników. @temp = map { [$_, -s $_] } @names; @sorted_files = sort { $b-> <=> $a-> } @temp; Zastosowanie permanentnej tablicy @temp powoduje zajęcie pewnego obszaru w pamięci operacyjnej w trakcie działania całego programu. Dodatkowo, jeżeli użytkownik zamiast sortowania po rozmiarze pliku potrzebować będzie listy plików posortowanych według daty ostatniej modyfikacji, potrzebne będzie utworzenie nowej struktury tablicowej.

Aby rozwiązać powyższe problemy należy zastosować transformację Schwartza, wykorzystując poniższy kod. @sorted_names = map { $_-> } # wyodrębnienie oryginalnej listy sort { $b-> <=> $a-> } # sortowanie (w odwrotnej kolejności) map { [ $_, -s $_ ] } # obliczanie rozmiaru pliku @names;

Idiom w Perlu Klasyczna Transformacja Schwartza w uproszczeniu posiada następującą postać: map {} sort {} map {} Postać kanoniczna TS występuje w poniższej postaci: @sorted = map { $_-> } sort { $a-> cmp $b-> } map { [$_, foo($_)] } @unsorted; Gdzie foo($_) reprezentuje wyrażenie, które przyjmuje zmienną $_ (po kolei każdy element listy) i tworzy odpowiadającą tej zmiennej wartość, która jest porównywana w