gpt4 book ai didi

perl - Perl何时自动初始化变量?

转载 作者:行者123 更新时间:2023-12-04 04:47:33 24 4
gpt4 key购买 nike

这是一些简单的Perl,用于计算值在数组中出现的次数。这将运行而没有任何警告。

use warnings;
use strict;

my @data = qw(1 1 2 3 4 5 5 5 9);
my %histogram;
foreach (@data)
{
$histogram{$_}++;
}

将循环体更改为
$histogram{$_} = $histogram{$_} + 1;

Perl警告“另外使用未初始化的值”。

到底发生了什么事?当将值作为操作数提供给++运算符而未使用+运算符初始化时,为什么将其初始化?

最佳答案

+运算符会同时评估左边的窗体和右边的窗体,然后返回两者的总和。哈希调用评估没有看到任何特殊的上下文。

++运算符内置了一些特殊的魔术。在perlop联机帮助页中对++运算符进行了引用:

"undef" is always treated as numeric, and in particular is changed to 0 before incrementing (so that a post-increment of an undef value will return 0 rather than "undef").



编辑:要详细说明差异,++会在适当的位置更改值,而+只是将其参数作为输入。当+看到一个未定义的值时,通常会出问题,但是对于++,您的哈希操作示例非常典型-用户希望将undef视为0,而不必每次都进行检查和初始化。因此,以这种方式对待这些运算符似乎很有意义。

关于perl - Perl何时自动初始化变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com