- https://docs.perl6.org/language/create-cli
- https://docs.perl6.org/routine/MAIN
- https://perl6.ru/2018/01/18/18-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F-main-%D0%B2-perl-6/
- https://perl6.ru/2018/01/19/%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F-main-%D0%B2-perl-6-%D1%87%D0%B0%D1%81%D1%82%D1%8C-2/
- https://perl6advent.wordpress.com/2014/12/22/the-cool-subset-of-main/
Необязательная функция MAIN нужна, чтобы удобнее парсить аргументы командной строки. Например вам нужно вызывать свой скрипт с такими аргументами:
hello.p6 --name=Василий --lastname=Пупкин --age=26тогда делайте так:
# --name=John --lastname=Smith --age=100
sub MAIN(Str :$name, Str :$lastname, Int :$age) {
say $name // 'Unknown name';
say $lastname // 'Unknown lastname';
say $age // 'Unknown age';
}
Если вы вызовёте скрипт вот так:
hello.p6 qwertyuiто вылетит ошибка С ПОДСКАЗКОЙ:
Другие примеры с функцией MAIN изучайте в ссылках выше.
Кстати,
// это оператор, а не комментарий, он проверяет переменную на defined.
say $name // 'Unknown name';
то же самое, что и
say $name.defined ?? $name !! 'Unknown name';
Ещё пример.
Вызов скрипта с одинаковыми аргументами в perl 5 и raku. Обратите внимание - в raku объём кода меньше и его читабельность лучше.
Perl 5:#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
@ARGV == 2 or die "Please supply two parameters.";
my %hash;
my ($name, $content) = @ARGV;
$hash{$name} = $content;
say "The item is called $name and its value is $hash{$name}";
This program displays the name of the item and its value:
$ perl sym_ref_fixed.pl foo bar
Raku:use v6;
sub MAIN (Str $name, Str $value) {
my %hash = $name => $value;
say "The item is called $name and its value is %hash{$name}";
}
This program displays the name of the item and its value:
$ perl6 sym_ref.p6 foo bar