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