Назад | Перейти на главную страницу

Сбой сценария Perl после 64-битного обновления

Недавно я обновил 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 (это никогда случилось со мной), поэтому я понятия не имею, что может быть причиной.