我真的不明白为什么下面这段perl代码
#!/usr/bin/perl -w
use strict;
use warnings;
strange($_) for qw(a b c);
sub strange {
open FILE, '<', 'some_file.txt' or die;
while (<FILE>) { } # this is line 10
close FILE;
}
Run Code Online (Sandbox Code Playgroud)
抛出以下错误
Modification of a read-only value attempted at ./bug.pl line 10.
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?或者我应该知道魔术/隐含变量的用法$_?
Eug*_*ash 11
该while (<fh>)构造隐式赋值给全局变量$_.
这在以下描述perlop:
当且仅当输入符号是while语句(...)条件内的唯一内容时,该值将自动分配给全局变量$ _,从而破坏之前的任何内容.(...)$ _变量不是隐式本地化的.你必须放一个本地$ _; 在循环之前,如果你想要发生这种情况.
抛出错误,因为$_最初别名为常量值("a").
你可以通过声明一个词法变量来避免这种情况:
while (my $line = <FILE>) {
# do something with $line
}
Run Code Online (Sandbox Code Playgroud)