Требуется написать программу sort.pl, которая принимает в командной строке список чисел, и выводит этот же список, но уже упорядоченный по неубыванию, по одному числу в строке:
%./sort.pl 3 6 1 1 8 11 51 1 3 5 6 8 11
Проверить нашу программу можно и на более длинных числовых списках, однако лень вводить такие списки в командную строку. Для создания таких списков можно применить написанную ранее программу seq.pl. Например, чтобы получить числа от до (в порядке убывания), запустим:
%./seq.pl 10 -1 110 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
Мы особенно оценим эту возможность, если потребуется подставить в командную строку очень длинный список, скажем, от до .
Кроме испытания программы сортировки на списках, у которых порядок чисел полностью противоположен желаемому, полезно провести испытания на списках, упорядоченных случайно. Для этих целей напишем программу 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
(маловероятно, что вам удастся воспроизвести эти результаты — каждый раз получается случайное упорядочение списка, а способов упорядочения списка из элементов много — ).
Хочется команду ./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здесь числа в случайном порядке