每当我读取文件时,Perl似乎都在杀死我的数组:
my @files = ("foo", "bar", "baz");
print "Files: " . join(" ", @files) . "\n";
foreach(@files) {
print "The file is $_\n";
func();
}
sub func {
open(READ, "< test.txt");
while(<READ>) {
}
close READ;
}
print "Files: " . join(" ", @files) . "\n";
Run Code Online (Sandbox Code Playgroud)
生产:
Files: foo bar baz
The file is foo
The file is bar
The file is baz
Files:
Run Code Online (Sandbox Code Playgroud)
但是当我发表评论时func(),它给出了我所期望的:
Files: foo bar baz
The file is foo
The file is bar
The file is baz
Files: foo bar baz
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样?
Leo*_*ans 12
您必须更改foo为本地化$_,或不在$_循环中使用.最好的,做到两个:
foreach my $filename (@files) {
print "The file is $filename\n";
func();
}
sub func {
local $_;
open my $read, '<', 'test.txt' or die "Couldn't open test.txt: $!";
while(<$read>) {
}
close $read or die "Couldn't close file: $!";
}
Run Code Online (Sandbox Code Playgroud)
foreach循环别名$_为文件的当前名称并while(<READ>)分配给$_.这就是魔术的糟糕组合,可以这么说.
一般来说,除了单线之外,依靠$_其他任何东西都是一个坏主意.
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |