gpt4 book ai didi

perl - 将散列结构分配给标量变量

转载 作者:行者123 更新时间:2023-12-04 16:10:05 25 4
gpt4 key购买 nike

我有以下代码,其中我有一个结构($node),它是一个声明的标量,但似乎是一个使用的哈希:

sub LoadData()
{
#not significant code here

my $node = {
BaseName => "deviceA",
SysDescr => "Example device",

SysObjectId => "SysObjectIdTest",

ManagementIpAddress => "BLABLABLA",
Protocol => "1",

};

$store->AddDeviceData( 1, $node->{BaseName}, $node );
}

我的问题是:正如我们在上面看到的那样声明的 $node 是散列还是标量?我的意思是,

之间有区别(就行为而言)
my $hash = {
#some foo => "bar" assign here
};

my %hash = (
#some foo => "bar" assign here
);

 my %hash = {
#some foo => "bar" assign here
}

PS:它表现为哈希引用,因为 AddDeviceData() 将最后一个参数限制为哈希引用。

PSS:也许它与上下文有关;分配给标量的哈希意味着分配对哈希的引用而不是哈希本身的内容,但我不太确定。

最佳答案

您提供的所有三个示例的行为都不同:

my $hash = {
foo => "bar",
};

使用单个键 foo 和值 bar 创建哈希引用,并将其分配给名为 $hash 的标量。使用 arrow operator 访问散列引用中的值(->) 后跟花括号和键名;例如$hash->{foo}; # 条码

my %hash = (
foo => "bar",
);

使用单键 foo 和值 bar 创建散列。使用花括号和键名访问散列中的值;例如$hash{foo}; # 条码

my %hash = {
foo => "bar",
}

尝试将散列引用分配给散列,实际上使匿名散列引用成为键。由于 Perl 中的所有哈希键都是字符串,因此键将类似于 'HASH(0x7f82948e1e18)',其值为 undef。如果您启用了 use warnings;(如您所愿),则在执行此行时会看到以下警告:

Reference found where even-sized list expected at test.pl line [line-number].

阅读有关 Perl 引用的文档可能会很有用:perldoc perlref

关于perl - 将散列结构分配给标量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493089/

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