- PVSM.RU - https://www.pvsm.ru -
1. Особенности работы с переменными и литералами в Perl6 [1]
2. Perl6 — Операции над переменными, анонимные блоки [2]
3. Perl6 — Условные операторы, циклы [3]
4. Perl6 — Работа с функциями [4]
5. Perl6 — Классы [5]
И так, после длительного перерыва я вернулся с изучению шестого перла. В этот раз я решил рассмотреть как же можно вести диалог с пользователем, и как работать с файлами, а также как можно разделить весь скрипт на различные модули.
В Perl6 для вывода текста на экран могут быть использованы две функции:
say 'text';
print "textn";
Разница между ними, как вы уже поняли из примера, в том, что say автоматически добавляет перевод строки после вывода всех переданных ей аргументов, в то время как print выводит все в одну строку.
Однако данные функции фактически являются методами объекта IO(), и если не указан объект, для которого вызывается метод, то используется объект $*OUT
$*OUT.say("Hello");
$*OUT.say: 'Hello';
Объект $*IN используется для считывания текста с клавиатуры.
Методы у этого объекта get и lines:
my @mas = $*IN.lines;
say @mas.elems;
В данном примере с клавиатуры считываются все строки, окончание ввода ^z.
В следующем примере считывается только одна строка
my $str = $*IN.get;
say $str;
Для работы с файлами используется функция open, которая возвращает объект того же типа что и переменные $*OUT и $*IN — IO():
my $file = open 'D:/test.txt', :r;
Для выбора режима открытия используются поименованные аргументы :r, :w, :a которые можно группировать
Так же стоит учесть, что если выбран только режим :r, то выполнение скрипта завершиться с ошибкой, если указанные файл файл не будет существовать.
Указанные выше поименованные параметры не единественные. Можно например указать :chomp(False), и у считываемых строк не будут удаляться символы конца строки. Об остальных параметрах можно почитать в документации.
Класс IO() содержит ещё несколько дополнительных методов, как например получение номера строки в файле, и т.п. Если возникнет необходимость, то их так же можно посмотреть в документации.
Создание модулей
Для создания своего модуля используется ключевое слово module:
module MyModule1;
module MyModule2 {...};
Для указания того, какие функции будут доступны в скрипте, который подключает данный модуль используется следующая конструкция is export:
module MyModule;
sub HiddenSub {...};
sub ExportedSub is export {...};
В результате если подключить данный модуль, то вызывать можно будет только функцию ExportedSub
Подключается модуль коммандой use moduleName;
Так же можно учитывать условия, когда необходим экспорт:
module ModuleName;
sub Test1 is export(:myConst) {...};
sub Test2 is export(:myAnotherConst, :myAdditionalConst) {...};
sub Test3 is export(:myAdditionalConst);
sub Test4 is export(:MANDATORY) {...};
Подключать можно следующим образом
use ModuleName :myConst, :myAnotherConst;
:MANDATORY экспортирует объект независимо от того, какие параметры были указаны.
Если указан параметр :myConst то будут импортированы Test1, Test2 и Test4
Однако если указать
use ModuleName :myAnotherConst, :myAdditionalConst
то произойдет ошибка при компиляции — произойдет повторный импорт функции Test2
Если указать
class MyClass is export
{
method MyMethod {...}
}
то все методы класса автоматически будут экспортированы.
Так же стоит упомянуть о том, что use подключает модули во время компиляции. Кроме неё есть функция require, которая подключает модули во время работы скрипта, только когда поток выполнения дойдет до этой инструкции, но у меня почему-то не получилось запустить ни одного примера.
Автор: WarFair
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/22214
Ссылки в тексте:
[1] 1. Особенности работы с переменными и литералами в Perl6: http://habrahabr.ru/post/152403/
[2] 2. Perl6 — Операции над переменными, анонимные блоки: http://habrahabr.ru/post/153875/
[3] 3. Perl6 — Условные операторы, циклы: http://habrahabr.ru/post/154701/
[4] 4. Perl6 — Работа с функциями: http://habrahabr.ru/post/154997/
[5] 5. Perl6 — Классы: http://habrahabr.ru/post/155571/
[6] Источник: http://habrahabr.ru/post/161989/
Нажмите здесь для печати.