Perl 替换值而不更新数组

标签 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;

返回以下内容。

$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/

相关文章:

Racket:for 内部的词法范围

javascript - 在词法作用域或 this-binding 之间使用对象方法?

perl - Perl 调试器为 $DB::sub 输出 "CODE(0x1431a90)"是什么意思?

linux - 为 QNX 6.6.0 armle v7 交叉编译 perl

mysql - 如何检查 Perl 模块 (DBD::mysql) 是否正确安装?

javascript - javascript函数中的词法作用域,为什么代码返回未定义

raku - 为什么 temp 在 Perl 6 核心设置中不起作用?

linux - Git Install Script 如何输入shell命令

perl - 检测 Perl 字符串是否可打印

lisp - 关于 Common Lisp 作用域的微妙之处(动态与词法)