我最近通过重新安装并将数据复制到位将 32 位 Debian 服务器升级到 64 位。
在此之后,我有一个 perl 脚本,它重复了下面的操作,并且在告诉线:
seek(FIN,$ps,0);
tell(FIN, $ps);
$line=<FIN>;
我不说话perl,所以我不确定这里到底发生了什么。我可以通过注释每次出现的 tell 来让脚本运行(显然成功了),但这显然不是最好的解决方案。
我怀疑告诉正在调用 32 位二进制文件或类似的东西,这是导致段错误的原因 - 但我不知道。
有人可以解释 tell 的作用如果它确实是一个单独的二进制文件,它属于哪个包(或者它是如何安装的,即 cpan)?
也许我走错了路?
答案1
根据 Perl 文档http://perldoc.perl.org/functions/tell.html,tell
只有一个参数并返回当前位置。您的代码有两个参数。请尝试以下方法:
$ps = tell(FIN);
tell
如果返回 -1(表示出现错误),还应该进行一些错误检查。
答案2
它是一个内置函数但是,段错误对于 perl 脚本来说是一个非常严重的死机方式(这已经绝不发生在我身上),所以我不知道可能是什么原因造成的。
答案3
为了回答您的直接问题,tell 返回文件句柄的当前位置。