Приветствую всех. Сегодня уже пятница, стало быть, пора опубликовать последнюю на этой неделе статью про Perl 6.

Тема небольшая, понятное дело — конец недели, грузить себя не очень хочется, да я, в общем-то, и не знаю, куда ее подевать, поэтому, пусть будет. Так или иначе, повествование должно быть последовательным.

Так вот, ради последовательности, представлю тему: «Основы I/O»

Объекты дескрипторов файлов
I/O стали еще более объектно-ориентированными.
Функция open теперь возвращает объект класса IO, через который доступны методы упраления файлом и принимает именованные параметры, чтобы указать правильный режим доступа к файлу:

my $fh = open("foo.txt", :r); # только чтение
my $fh = open("foo.txt", :w); # только запись
my $fh = open("foo.txt", :rw); # запись/чтение
my $fh = open("foo.txt", :a); # добавление в конец

Прохождение по содержимому файла осуществляется при помощи цикла for и оператора =, чтобы получить доступ к дескриптору файла:

my $fh = open("README", :r);
for =$fh -> $line {
say $line;
}
$fh.close();

Важно помнить, что при чтении файла символ новой строки удаляется автоматически (auto-chomp).

Запись в файл
Для того, чтобы писать в файл, достаточно использовать методы print и say применительно к объекту файла:

my $fh = open("example.txt", :w);
for 1..10 -> $i {
$fh.say($i);
}
$fh.close();

Стандартные потоки
- STDIN теперь доступен глобально, как $*IN, STDOUT как $*OUT, а STDERR как $*ERR.
- Это всего лишь дескрипторы файлов, поэтому к ним так же просто применяются методы чтения/записи:

print "Your name is: ";
my $name = $*IN.readline;
say "Hi, $name!";

Парочка удобных функций
Функция slurp читает файл и складывает прочитанное в переменную:

my $content = slurp("data.txt");

Вообще, ее применение более обширно и означает всегда одно и то же: захват всего потока в переменную. Не только файла. Например, это тоже невозбранно:

my $content = $*IN.slurp;

Функция prompt возвращает набранный в STDIN текст:

my $name = prompt "Your name is: ";
say "OH HAI, { $name.uc }!";

shootnix
shootnix
14 августа 2009, 02:12
 8  
просмотров
546
4
 
dr_tarr
14 августа 2009, 10:44
0
Скукота! То ли дело монадическое IO!
shootnix
14 августа 2009, 12:04
0
Что цэ такэ?
dr_tarr
14 августа 2009, 12:12
0
Подход к IO в чистых функциональных языках. Представляет из себя основанное на continuation passing style IO, структурированное монадами (= выразимое в монадических комбинаторах).
shootnix
14 августа 2009, 12:16
0
Ясно, спасибо за разьяснение. Да, в Perl 6 все более традиционно с точки зрения процедурной парадигмы.
chiaroscuro
14 августа 2009, 13:00
0
Разъяснил, так разъяснил. Механизм тут неинтересен, интересен профит, получаемый от него.

Сходу могу назвать:
- модульность (низкая "зацепленность", в терминологии Фаулера et al)
- абстрактность (комбинаторы работают для *любой* монады, а не только для IO-монады; "единая точка управления")

Вышеперечисленное дает прирост в продуктивности и уменьшает труд, необходимый для написания и проверки кода.
dr_tarr
14 августа 2009, 13:49
0
>Механизм тут неинтересен, интересен профит, получаемый от него.

Интересно и то, и другое. Диалектика, панимаишь!
yakost
14 августа 2009, 13:24
1
А почему Вы спрашиваете?
shootnix
14 августа 2009, 13:36
0
Просто интересно.
Чтобы оставлять комментарии, Вы должны быть авторизованы. Если у Вас нет логина, то пройдите регистрацию.
участники
shootnix
Rex
edmond-mouse
mikusya
Legend_FoX
PeterWilson
askhattk
barmaglot
wwax
tima888
t-sh
Sigurt
zloyrusskiy
goodev
10275
PILIGRIM
войти
зарегистрироваться
сообщества
последние записи
записи по обсуждениям
записи по рейтингу
создать новое сообщество
личные блоги
последние записи
записи по обсуждениям
люди
самые активные
новые
по городам
по интересам
блог проекта
правила участия
помощь
мы на других сайтах
реклама
конкурсы
контакты
WebEverywhere, 2008-2010

Lyakhov.KZ - Большая энциклопедия Казнета Lyakhov.KZ - Большая энциклопедия Казнета