Приветствую всех. Сегодня уже пятница, стало быть, пора опубликовать последнюю на этой неделе статью про 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 }!";






































14 августа 2009, 10:44
14 августа 2009, 12:04
14 августа 2009, 12:12
14 августа 2009, 12:16
14 августа 2009, 13:00
Сходу могу назвать:
- модульность (низкая "зацепленность", в терминологии Фаулера et al)
- абстрактность (комбинаторы работают для *любой* монады, а не только для IO-монады; "единая точка управления")
Вышеперечисленное дает прирост в продуктивности и уменьшает труд, необходимый для написания и проверки кода.
14 августа 2009, 13:49
Интересно и то, и другое. Диалектика, панимаишь!
14 августа 2009, 13:24
14 августа 2009, 13:36