gpt4 book ai didi

loops - 循环文件时数组元素被删除

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

我在遍历文件名时遇到问题,我的输入数组元素被删除。

代码:

use Data::Dumper;
use warnings;
use strict;


my @files = ("file1", "file2", "file3");

print Dumper(\@files);

for (@files) {
my $filename = $_ . '.txt';
open(my $fh, '<:encoding(UTF-8)', $filename)
or die "Could not open file '$filename' $!";
while(<$fh>) {
print "$filename read line \n";
}
}
print Dumper(\@files);

输出:
$VAR1 = [
'file1',
'file2',
'file3'
];
file1.txt read line
file2.txt read line
file3.txt read line
$VAR1 = [
undef,
undef,
undef
];

文件内容:
 cat file1.txt
asdfsdfs
cat file2.txt
iasdfasdsf
cat file3.txt
sadflkjasdlfj

为什么数组内容会被删除?
(对于这个问题,我有 2 种不同的解决方法,但我想了解这段代码有什么问题。)

最佳答案

while (<$fh>)

是简称
while ($_ = <$fh>)

所以你在捣乱 $_别名为 @files 的元素.您需要保护 $_如下:
while (local $_ = <$fh>)

更好的是,使用不同的变量名称。
while (my $line = <$fh>)

关于loops - 循环文件时数组元素被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690800/

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