Чтение данных из DATA через типичный прием slurp работает. Попытка использовать DATA в качестве дескриптора файла, для которого я могу выполнить поиск, не работает. Кто-нибудь может указать мне на очевидную ошибку, которую я должен сделать?
Код:
#!/usr/bin/env perl
use strict;
use warnings;
if ($ARGV[0] eq 'seek' ) {
my $log_fh = \*DATA;
$log_fh->seek(64,0);
print "\n-- 64 --\n",join ("", <$log_fh> );
} else {
while (<DATA>) {
print $_;
}
}
exit;
__DATA__
01234567890123456789
1234567890123456789
1234567890123456789
12
X <- That X is the 64th char in
this file.
Y <- That Y is the 106th char in this file.
junk
more junk.
bye!
$ perl file_from_data.pl slurp
01234567890123456789
1234567890123456789
1234567890123456789
12
X <- That X is the 64th char in
this file.
Y <- That Y is the 106th char in this file.
junk
more junk.
bye!
Запуск цикла while ():
$ perl file_from_data.pl slurp
01234567890123456789
1234567890123456789
1234567890123456789
12
X <- That X is the 64th char in
this file.
Y <- That Y is the 106th char in this file.
junk
more junk.
bye!
При запуске seek (), похоже, что он начинается не с DATA , а с началом скрипта:
$ perl file_from_data.pl seek
-- 64 --
'seek' ) {
my $log_fh = \*DATA;
$log_fh->seek(64,0);
print "\n-- 64 --\n",join ("", <$log_fh> );
} else {
while (<DATA>) {
print $_;
}
}
exit;
__DATA__
01234567890123456789
1234567890123456789
1234567890123456789
12
X <- That X is the 64th char in
this file.
Y <- That Y is the 106th char in this file.
junk
more junk.
bye!
Это старый Perl:
$ perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-
thread-multi