gpt4 book ai didi

perl - 在 Perl 中,为什么不能使用 __DATA__ 作为可查找的文件句柄?

转载 作者:行者123 更新时间:2023-12-04 18:01:02 27 4
gpt4 key购买 nike

通过典型的 slurp 工作从 DATA 读取。尝试将 DATA 用作我可以进行搜索的文件句柄是行不通的。有没有人能够指出我必须犯的明显错误?

代码:

#!/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!

运行 while() 循环:
$ 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 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!

这是一个旧的 Perl:
$ perl -v

This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-
thread-multi

最佳答案

Running the seek(), it appears to not start at DATA but the start of the script



我认为你根本没有犯任何错误。这正是发生的事情。 DATA是在源文件上打开的文件句柄。在您第一次之前 read()从那个文件句柄开始,文件指针紧跟在 __DATA__ 之后。文件中的 token 。但是你可以使用 seek()将文件指针移动到文件中的任何位置。

我想实现一个无法在其初始位置之前移回的“特殊情况”文件句柄会更难。

关于perl - 在 Perl 中,为什么不能使用 __DATA__ 作为可查找的文件句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52104530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com