gme*_*zos 5 perl loops file-handling
我在遍历文件名时遇到问题,我的输入数组元素被删除了。
码:
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);
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = [
'file1',
'file2',
'file3'
];
file1.txt read line
file2.txt read line
file3.txt read line
$VAR1 = [
undef,
undef,
undef
];
Run Code Online (Sandbox Code Playgroud)
文件内容:
cat file1.txt
asdfsdfs
cat file2.txt
iasdfasdsf
cat file3.txt
sadflkjasdlfj
Run Code Online (Sandbox Code Playgroud)
为什么数组内容被删除?(对于该问题,我有2种不同的解决方法,但是我想了解这段代码有什么问题。)
while (<$fh>)
Run Code Online (Sandbox Code Playgroud)
是短的
while ($_ = <$fh>)
Run Code Online (Sandbox Code Playgroud)
因此,您正在$_
为别名的元素而烦恼@files
。您需要进行以下保护$_
:
while (local $_ = <$fh>)
Run Code Online (Sandbox Code Playgroud)
更好的是,使用其他变量名。
while (my $line = <$fh>)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
65 次 |
最近记录: |