Взаимодействие с командной строкой 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 <num1> <num2>";     } 

    $ perl6 add2.pl too many arguments     Использование: add.pl <num1> <num2> 

Объявив функцию 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 предоставляет встроенные возможности парсера командной строки и выдачи сообщений о правильном использовании программы, когда вы просто объявляете специальные функции и их сигнатуры.

ссылка на оригинал статьи http://habrahabr.ru/post/252451/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *