на главнуюВсе эхи RU.PERL
войти ?

Re: __ВФЕФ__

От Eugene Grosbein (2:5006/1) к Dmitry Ivanov

В ответ на Заголовок предыдущего сообщения в треде (Имя Автора)


04 февр. 2021, четверг, в 04:24 NOVT, Dmitry Ivanov написал(а):

DI> Глупый вопрос про __DATA__
DI> Есть очень условный скрипт
DI> my $i;
DI> for $i ( 1 .. 3 ) {
DI> while (<DATA>) {
DI> print "$i+$_\n";
DI> }
DI> }
DI> __DATA__
DI> 4
DI> 5
DI> 6
DI> так вот на первой итерации ($i = 1 DATA "заканчивается". Как
DI> начатьчитать ее сначала?
DI> Я много гуглил, нагуглилЮ что специальный файловый дескриптор.
DI> Пробовал его закрывать close и через seek гонять. Hе получается.

Hужно понять, что в __DATA__ нет никакой магии:
встретив в первый раз обращение к <DATA>, интерпретатор perl,
уже имея открытый исходник скрипта, находит в нём __DATA__
и делает seek на начало следующей строки, так чтобы
любая работа с <DATA> происходила ровно так же,
как с любым другим файлом.

Поэтому тебе надо действовать, как с любым другим файлом,
в лоб:

my $offset = tell(DATA); # запоминаем исходное смещение
for $i ( 1 .. 3 ) {
seek(DATA, $offset, 0); # переустанавливаем указатель
while (<DATA>) { # читаем с нужной позиции
print "$i+$_\n";
}
}
__DATA__

Eugene
--
И друзей успокоив и ближних любя,
Мы на роли героев вводили себя.
--- slrn/1.0.3 (FreeBSD)
* Origin: RDTC JSC (2:5006/1@fidonet)

Ответы на это письмо:

From: Username
Заголовок следующего сообщения в треде может быть длинным и его придется перенести на новую строку

From: Username
Или коротким

FGHI-url этого письма: area://RU.PERL?msgid=grosbein.net+2c0f169b