我正在尝试在Perl中使用getpos
。我在下面的代码中使用了FileHandle
对象,它似乎没有用。谁能告诉我我做错了什么?
use strict;
use warnings;
use FileHandle;
my $fh = new FileHandle;
$fh->open("<test.txt") or die "$!";
my $pos = $fh->getpos;
print "pos: \"$pos\"\n";
输出结果为:
pos: ""
我希望输出“0”......
答案 0 :(得分:4)
FileHandle的文档说getpos
返回的值是一个不透明的值,这意味着通常你不能假设有关该值的任何有意义的东西。它唯一的好处就是回到setpos
。这与用于实现方法(fgetpos和fsetpos)的底层系统调用相匹配,这些方法在C中表示为不透明的fpos_t
指针。 seek
和tell
方法(如果可用)使用可以操作的整数文件位置。
答案 1 :(得分:4)
请注意documentation中的警告(强调添加):
如果C函数
fgetpos
和fsetpos
可用,则FileHandle::getpos
会返回不透明值,表示FileHandle
的当前位置,FileHandle::setpos
使用该值返回之前访问过的位置。
不透明意味着您不应该注意该值:仅将其用作模块未来请求中的参数。
#! /usr/bin/perl
use warnings;
use strict;
open my $fh, "<", $0 or die "$0: open: $!";
print tell($fh), "\n";
上述程序的输出为0
,正如您所期望的那样。