Постановка задачи

Требуется написать программу sort.pl, которая принимает в командной строке список чисел, и выводит этот же список, но уже упорядоченный по неубыванию, по одному числу в строке:

Проверить нашу программу можно и на более длинных числовых списках, однако лень вводить такие списки в командную строку. Для создания таких списков можно применить написанную ранее программу seq.pl. Например, чтобы получить числа от 10 до 1 (в порядке убывания), запустим:

% ./seq.pl 10 -1 1 10 9 8 7 6 5 4 3 2 1

Вместо того, чтобы дать программе seq.pl выводить числа на экран, заставим её вывести числа в командную строку программы sort.pl. Для этого в командном языке операционной системы Linux имеется конструкция `…`:

% ./sort.pl `./seq.pl 10 -1 1` 1 2 3 4 5 6 7 8 9 10

Результат будет тот же самый, что и при запуске

% ./sort.pl 10 9 8 7 6 5 4 3 2 1

Мы особенно оценим эту возможность, если потребуется подставить в командную строку очень длинный список, скажем, от 1000 до 1.

Кроме испытания программы сортировки на списках, у которых порядок чисел полностью противоположен желаемому, полезно провести испытания на списках, упорядоченных случайно. Для этих целей напишем программу shuffle.pl, которая делает нечто противоположное сортировке — перемешивает элементы списка в случайном порядке:

% ./shuffle.pl `./seq.pl 1 10` 4 2 9 10 6 7 1 8 3 5 % ./shuffle.pl `./seq.pl 1 10` 10 5 6 8 3 4 2 7 9 1 % ./shuffle.pl `./seq.pl 1 10` 8 4 3 1 9 7 10 2 5 6

(маловероятно, что вам удастся воспроизвести эти результаты — каждый раз получается случайное упорядочение списка, а способов упорядочения списка из 10 элементов много — 10 ! = 3628800 ).

Хочется команду ./shuffle.pl `./seq.pl 1 10` заключить в обратные кавычки и подставить то, что получится, после команды ./sort.pl. Но это будет неверно проинтерпретировано: по понятным причинам нельзя вставлять конструкцию `…` внутрь другой конструкции `…`. На этот случай существует альтернатива `…`-выражениям — $(…):

% ./sort.pl $(./shuffle.pl $(./seq.pl 1 10)) 1 2 3 4 5 6 7 8 9 10

Итак, следующие команды равносильны:

% ./sort.pl $(./shuffle.pl $(./seq.pl 1 10)) % ./sort.pl $(./shuffle.pl 1 2 3 4 5 6 7 8 9 10) % ./sort.pl 4 2 9 10 6 7 1 8 3 5 здесь числа в случайном порядке

Информатика-54© А. Н. Швец