通过典型的Slurp读取DATA。尝试将DATA用作可以进行查找的文件句柄不起作用。有谁能指出我必须犯的明显错误?
代码:
(http://images\.(\d+)_120\*75)(?![\s\S]*\1)
运行while()循环:
#!/usr/bin/env perl
use strict;
use warnings;
if ($ARGV[0] eq 'seek' ) {
my $log_fh = \*DATA;
$log_fh->seek(64,0);
print "\n-- 64 --\n",join ("", <$log_fh> );
} else {
while (<DATA>) {
print $_;
}
}
exit;
__DATA__
01234567890123456789
1234567890123456789
1234567890123456789
12
X <- That X is the 64th char in
this file.
Y <- That Y is the 106th char in this file.
junk
more junk.
bye!
$ perl file_from_data.pl slurp
01234567890123456789
1234567890123456789
1234567890123456789
12
X <- That X is the 64th char in
this file.
Y <- That Y is the 106th char in this file.
junk
more junk.
bye!
运行seek(),它似乎不是从 DATA 开始,而是脚本的开始:
$ perl file_from_data.pl slurp
01234567890123456789
1234567890123456789
1234567890123456789
12
X <- That X is the 64th char in
this file.
Y <- That Y is the 106th char in this file.
junk
more junk.
bye!
这是旧的Perl:
$ perl file_from_data.pl seek
-- 64 --
'seek' ) {
my $log_fh = \*DATA;
$log_fh->seek(64,0);
print "\n-- 64 --\n",join ("", <$log_fh> );
} else {
while (<DATA>) {
print $_;
}
}
exit;
__DATA__
01234567890123456789
1234567890123456789
1234567890123456789
12
X <- That X is the 64th char in
this file.
Y <- That Y is the 106th char in this file.
junk
more junk.
bye!
答案 0 :(得分:7)
运行seek(),它似乎不是从 DATA 开始,而是脚本的开始
我认为您根本没有犯任何错误。就是这样。 DATA
是在源文件上打开的文件句柄。在该文件句柄的第一个read()
之前,文件指针位于文件中__DATA__
标记之后。但是您可以使用seek()
将文件指针移到文件中的所有位置。
我想实现“特殊情况”文件句柄将变得更加困难,该文件句柄无法在其初始位置之前移回。