我有以下 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;
返回以下内容。
$VAR1 = [
'apple',
'banana',
'orange',
'pear'
];
$VAR1 = [
'peach',
'banana',
'orange',
'pear'
];
我不明白为什么以下行将@fruits 数组中的apple 更改为peach,因为我认为该行仅适用于$fruit 变量,而不适用于@fruits 数组。
$fruit =~ s|apple|peach|;
最佳答案
在 perl 的 html 文档中,我们有以下 foreach 循环语句:
the foreach loop index variable is an implicit alias for each item in the list that you're looping over
这意味着,您不会获得每个数组元素的副本。变量 $fruit
只是对数组元素的引用。如果可以修改数组元素,则可以修改其值。修改适用于原始数组元素。
关于Perl 替换值而不更新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68590192/