1. Особенности работы с переменными и литералами в Perl6 2. Perl6 — Операции с переменными, анонимные блоки 3. Perl6 — Условные операторы, циклы 4. Perl6 — Работа с функциями 5. Perl6 — Классы И вот, после долгого перерыва, я вернулся к изучению шестой жемчужины.
В этот раз я решил посмотреть, как можно вести диалог с пользователем, и как работать с файлами, а также как можно разделить весь скрипт на разные модули.
В Perl6 для отображения текста на экране можно использовать две функции:
Разница между ними, как вы уже поняли из примера, заключается в том, что Say автоматически добавляет новую строку после печати всех переданных ему аргументов, а print печатает все в одной строке.say 'text'; print "text\n";
Однако эти функции на самом деле являются методами объекта 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 MyModule1;
module MyModule2 {.
};
Чтобы указать, какие функции будут доступны в скрипте, подключающем этот модуль, используется следующая конструкция экспорта: 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, которая подключает модули во время работы скрипта, только когда поток выполнения доходит до этой инструкции, но мне почему-то не удалось запустить ни одного примера.
Теги: #perl6 #файлы #модули #perl #программирование
-
Alcatel Lucent – Настройка Dect-Телефона
19 Oct, 24 -
Машина Тьюринга И Ассемблер
19 Oct, 24 -
Открытое Производство - Мотивационный Аспект
19 Oct, 24 -
Коммунистический Лофт Меняет Тарифную Сетку
19 Oct, 24 -
#11 Джокаст
19 Oct, 24