Jer*_*eld 3 perl lexical-scope
我有以下 Perl 脚本。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @fruits = qw(apple banana orange pear);
print Dumper \@fruits;
foreach my $fruit (@fruits) {
$fruit =~ s|apple|peach|;
}
print Dumper \@fruits;
Run Code Online (Sandbox Code Playgroud)
返回以下内容。
$VAR1 = [
'apple',
'banana',
'orange',
'pear'
];
$VAR1 = [
'peach',
'banana',
'orange',
'pear'
];
Run Code Online (Sandbox Code Playgroud)
我不明白为什么以下行将 @fruits 数组中的 apple 更改为 peach,因为我认为此行仅适用于 $fruit 变量,而不适用于 @fruits 数组。
$fruit =~ s|apple|peach|;
Run Code Online (Sandbox Code Playgroud)
在 perl 的 html 文档中,我们对 foreach 循环有以下语句:
foreach 循环索引变量是您要循环的列表中每个项目的隐式别名
这意味着,您不会获得每个数组元素的副本。该变量$fruit只是对数组元素的引用。如果可以修改数组元素,则可以修改其值。修改适用于原始数组元素。