[Перевод] Взаимодействие с командной строкой perl 6 из функции MAIN

В Unix-среде множество скриптов получают аргументы из командной строки. В Perl 6 обрабатывать их очень просто: $ cat add.pl sub MAIN ($x, $y) { say $x + $y } $ perl6 add.pl 3 4 7 $ perl6 add.pl too many arguments Usage: add.pl x y Просто создав функцию MAIN и задав ей сигнатуру из параметров, вы автоматически получаете парсер командной строки, который передаёт их в аргументы функции $x и $y, и сообщение о правильном вызове скрипта.Это сообщение можно настроить, добавив дополнительную функцию USAGE:

$ cat add2.pl sub MAIN ($x, $y) { say $x + $y } sub USAGE () { say «Использование: add.pl »; } $ perl6 add2.pl too many arguments Использование: add.pl Объявив функцию MAIN как multi, можно задать альтернативный синтаксис или использование синтаксиса в зависимости от значения константы:

$ cat calc #!/usr/bin/env perl6 multi MAIN ('add', $x, $y) { say $x + $y } multi MAIN ('div', $x, $y) { say $x / $y } multi MAIN ('mult', $x, $y) { say $x * $y } $ ./calc add 3 5 8 $ ./calc mult 3 5 15 $ ./calc Usage: ./calc add x y or ./calc div x y or ./calc mult x y Именованные параметры соответствуют опциям:

$ cat copy.pl sub MAIN ($source, $target, Bool:$verbose) { say «Копируем '$source' в '$target'» if $verbose; run «cp $source $target»; } $ perl6 copy.pl calc calc2 $ perl6 copy.pl --verbose calc calc2 Копируем 'calc' to 'calc2' Объявление параметра как Bool отменяет передачу в него значения. Если бы ограничения типа Bool не было, значение было бы передано в него:

$ cat do-nothing.pl sub MAIN (:$how = 'быстро') { say «Ничего не делай, но делай это $how»; } $ perl6 do-nothing.pl Ничего не делай, но делай это быстро $ perl6 do-nothing.pl --how=хорошо Ничего не делай, но делай это хорошо $ perl6 do-nothing.pl what? Usage: do-nothing.pl [--how=value-of-how] В общем, Perl 6 предоставляет встроенные возможности парсера командной строки и выдачи сообщений о правильном использовании программы, когда вы просто объявляете специальные функции и их сигнатуры.

© Habrahabr.ru