Аргументы командной строки и элементы массивов

В первой строке в функции main() примера parrot/languages/perl6/examples/qsort.p6 делается попытка чтения аргументов командной строки, указанных при запуске скрипта:

my @a = 1..(@ARGS[0] || 100);

Одновременно с объявлением происходит инициализация массива последовательностью целых чисел, которая создается с помощью бинарного оператора .. (две точки). Он принимает два целых операнда и возвращает массив, первый элемент которого совпадает с левым операндом, а последний — с правым. Промежуточные элементы массива отличаются друг от друга на единицу. В примере второй операнд зависит от того, был ли указан параметр при запуске программы. Выражение в круглых скобках принимает либо значение, переданное в первом параметре, либо 100, если элемент @ARGS[0] не определен или равен нулю.

В приведенной строке кода содержатся сразу два новшества Perl 6. Во-первых, аргументы командной строки попадают в массив @ARGS (в Perl 5 те же функции выполнял массив @ARGV). Во-вторых, обратите внимание на то, каким способом происходит обращение к первому (с номером 0) элементу массива. Ранее, чтобы показать, что нам требуется скаляр (отдельный элемент массива и является скаляром), необходимо было написать $ARGV[0], заменяя символ @ символом $. В Perl 6 этого делать не требуется. Символ, указывающий на то, чем является переменная (скаляром, массивом или хэшем), монолитно сливается с именем переменной. Поэтому, чтобы обратиться ко всему массиву с именем array, как и прежде, следует записать @array, а если нужно выделить один элемент этого массива, достаточно дописать в квадратных скобках индекс элемента: @array[5].