Недавно я обновил 32-разрядный сервер Debian до 64-разрядного, переустановив его и скопировав свои данные на место.
После этого у меня есть perl-скрипт, который повторяет следующее, но с ошибкой сказать линия:
seek(FIN,$ps,0);
tell(FIN, $ps);
$line=<FIN>;
Я не говорю Perl, поэтому я не совсем уверен, что здесь происходит. Я могу запустить сценарий (очевидно, успешно), комментируя каждое появление tell, но это, очевидно, не лучшее решение.
Я подозреваю что сказать вызывает 32-битный двоичный файл или что-то в этом роде, и это является причиной segfault - но я не знаю.
Может кто-нибудь объясните, что делает Tell, и если это действительно отдельный двоичный файл, к какому пакету он принадлежит (или как он установлен т.е. cpan)?
Или, может быть, я ошибаюсь?
Согласно документации Perl на http://perldoc.perl.org/functions/tell.html, tell
имеет только один параметр и возвращает текущую позицию. Ваш код имеет два параметра. Попробуйте вместо этого:
$ps = tell(FIN);
Также должна быть некоторая проверка ошибок в случае, если tell
возвращает -1, что указывает на ошибку.
Чтобы ответить на ваш прямой вопрос, tell возвращает текущую позицию дескриптора файла.
Это встроенная функция, но segfault - довольно суровый способ умереть скрипту perl (это никогда случилось со мной), поэтому я понятия не имею, что может быть причиной.