...

воскресенье, 8 марта 2015 г.

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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий