Обратите внимание на предостережение (выделение добавлено) в документации :
Если доступны функции C fgetpos
и fsetpos
, то FileHandle::getpos
возвращает непрозрачное значение , которое представляет текущую позицию FileHandle
, а FileHandle::setpos
использует это значение для вернуться на ранее посещенную позицию.
Непрозрачный означает, что вы не должны обращать внимание на значение: используйте его только в качестве параметра в будущих запросах от модуля.
Почему бы не использовать операторы Perl tell
и seek
?
#! /usr/bin/perl
use warnings;
use strict;
open my $fh, "<", $0 or die "$0: open: $!";
print tell($fh), "\n";
Вывод указанной выше программы, как и ожидалось, 0
.