我有以下代码,其中我有一个结构($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 );
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:正如我们在上面看到的那样声明的$node是散列还是标量?我的意思是,两者之间有区别吗(就行为而言)
my $hash = {
#some foo => "bar" assign here
};
Run Code Online (Sandbox Code Playgroud)
和
my %hash = (
#some foo => "bar" assign here
);
Run Code Online (Sandbox Code Playgroud)
和
my %hash = {
#some foo => "bar" assign here
}
Run Code Online (Sandbox Code Playgroud)
PS:它表现为散列引用,因为 AddDeviceData() 将最后一个参数限制为散列引用。
PSS:也许它与上下文有关;分配给标量的散列意味着分配对散列的引用而不是散列本身的内容,但我不太确定。
您提供的所有三个示例的行为都不同:
my $hash = {
foo => "bar",
};
Run Code Online (Sandbox Code Playgroud)
创建一个具有单个键 foo 和值 bar 的哈希引用,并将其分配给名为 的标量$hash。散列引用中的值通过使用arrow operator(->) 后跟花括号和键名来访问;例如$hash->{foo}; # bar
my %hash = (
foo => "bar",
);
Run Code Online (Sandbox Code Playgroud)
创建一个带有单键 foo 和值 bar 的散列。散列中的值通过花括号和键名访问;例如$hash{foo}; # bar
my %hash = {
foo => "bar",
}
Run Code Online (Sandbox Code Playgroud)
尝试将散列引用分配给散列,这有效地使匿名散列引用成为键。由于Perl中所有的哈希键是字符串,关键是这样'HASH(0x7f82948e1e18)'用的值undef。如果您已use warnings;启用(如您应该的那样),则在执行此行时您会看到以下警告:
参考在 test.pl 行 [行号] 中找到了预期大小均匀的列表。
阅读 Perl 参考文档可能会很有用: perldoc perlref
| 归档时间: |
|
| 查看次数: |
1979 次 |
| 最近记录: |