gpt4 book ai didi

Perl 隐式关闭重置 $。多变的

转载 作者:行者123 更新时间:2023-12-04 17:37:14 25 4
gpt4 key购买 nike

documentation Perl 的 close声明 $.如果您使用由 open 完成的隐式关闭,则不会重置.我试图确切地了解这意味着什么,但无法让它发生。这是我的脚本:

use strict;
use warnings;
use autodie;
my @files = qw(test1.txt test2.txt test3.txt);

#try with implicit close
for my $file (@files){
open my $fh, '<', $file;
while(<$fh>){
chomp;
print "line $. is $_\n";
}
#implicit close here
}

以下是读入的所有三个文件的内容:
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
line 10

由于我没有明确调用 close ,隐式 close应该使用(我认为)和 $.不应该被重置。但是,当我运行脚本时,我得到了这个输出,显示 $.被重置:
line 1 is line 1
line 2 is line 2
line 3 is line 3
line 4 is line 4
line 5 is line 5
line 6 is line 6
line 7 is line 7
line 8 is line 8
line 9 is line 9
line 10 is line 10
line 1 is line 1
line 2 is line 2
line 3 is line 3
line 4 is line 4
line 5 is line 5
line 6 is line 6
line 7 is line 7
line 8 is line 8
line 9 is line 9
line 10 is line 10
line 1 is line 1
line 2 is line 2
line 3 is line 3
line 4 is line 4
line 5 is line 5
line 6 is line 6
line 7 is line 7
line 8 is line 8
line 9 is line 9
line 10 is line 10

看起来它确实被我重置了。我对文档的理解有误吗?有人可以告诉我在什么情况下隐式 close不会重置 $. ?

顺便说一下,我使用的是 Strawberry 5.16.1。

最佳答案

$.实际上不是全局变量,它是最近读取的文件句柄的属性。并且您在循环的每次迭代中都使用了一个新的文件句柄。

像这样修改你的代码“修复”它:

my $fh;
for my $file (@files){
open $fh, '<', $file;

关于Perl 隐式关闭重置 $。多变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14513477/

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