perl数组硬引用_带有哈希引用的Perl数组引用(Perl Array Reference with hash reference)

带有哈希引用的Perl数组引用(Perl Array Reference with hash reference)

my $var1=[{'a'=>'1','b'=>'2'},1];

print @$var1[0]->{a};

它将打印1

但是,如果我打印如下:

print @$var1->{a};

它会打印如下错误

Can't use an undefined value as a HASH reference;

谁能解释两个print语句之间的差异?

my $var1=[{'a'=>'1','b'=>'2'},1];

print @$var1[0]->{a};

it will print 1

but, if i print like below:

print @$var1->{a};

it will print error like below

Can't use an undefined value as a HASH reference;

Can anyone explain diff between both print statement?

原文:https://stackoverflow.com/questions/30865995

2020-04-23 09:04

满意答案

my $var1=[{'a'=>'1','b'=>'2'},1];

$ var1是数组引用,它包含索引0处的哈希引用和索引1处的标量

要将$ var1引入数组,我们必须使用@ $ var1。(它给出了2元素数组)并且为了访问单个元素,我们必须使用$$ var1 [0]或$ var1 - > [0]。

并且$ var1 - > [0]是一个哈希引用。 要取消它,我们必须使用$ var1 - > [0] {'a'}。

但声明“@ $ var1 - > {'a'}”无效,因为

散列引用出现在数组“@ $ var1”的0索引处。

所有引用都是标量,Array不能用于对哈希引用进行derefer。

有关更多信息,请参阅

my $var1=[{'a'=>'1','b'=>'2'},1];

$var1 is array reference which contains hash reference at index 0 and scalar at index 1

to derefer $var1 to array, we have to use @$var1.(which gives the 2-element array) And for accessing single element we have to use $$var1[0] or $var1->[0].

And again $var1->[0] is a hash reference. To derefer it, we have to use $var1->[0]{'a'}.

But the statement "@$var1->{'a'}" is invalid, since

Hash reference is present at 0 index of the array "@$var1".

All references are scalar, Array cannot be used to derefer at hash reference.

For more information, please refer

2015-06-17

相关问答

只需添加 next unless exists $AoH[$i]{husband};

在第一次之后。 如果husband密钥不存在,它将跳过散列。 要过滤值,请使用其中之一 next unless grep 'john' eq $_, values %{ $AoH[$i] };

要么 next unless { reverse %{ $AoH[$i] } }->{homer};

Just add next unless exists $AoH[$i]{husband};

after the...

看起来$listref是对哈希引用数组的引用。 如果你需要使用包含哈希引用的变量,那么如果你命名该变量而不是使用默认标量$_则会更好 解除引用哈希并将其复制到%args也没有意义,只是引用该哈希并将其作为参数传递给子例程 调用带有&符号&字符的子程序是错误的,自从Perl v5.5在17年前降落以来一直如此 你的循环应该是这样的 for my $item ( @$listref ) {

format_trading_card_preview_item($item);

}

在子程序中,它很...

# 'a' => { 'count' => 2, 'b' => { 'count' => 2, 'c' => ......} }

sub build_hash {

$_[0] ||= {};

my $hash = shift;

for (@_) {

$hash = $hash->{$_} ||= {};

++$hash->{count};

}

}

build_hash($hash, @array1);

build_hash($ha...

你不需要 my @total = ();

这个: my @total;

足以满足你的需求。 声明您的数组将包含哈希值不需要特殊语法。 做foreach部分可能有不同的方法,但这应该有效: foreach (sort keys %{$total[$the_index_you_want]}) {

print $_."\t".$total[$the_index_you_want]{$_}."\n";

}

[顺便说一句,宣布my @total; 在那个循环中可能不是你想要的(它会在每一行重置)。...

如果你想要单个数组中所有哈希的值, my @ref_values = map @$_{ qw(name position hat) }, @crew;

If you want values of all hashes in single array, my @ref_values = map @$_{ qw(name position hat) }, @crew;

您可以使用hash-ref而不必取消引用它: addParams(\%params);

sub addParams

{

my $params = shift;

$params->{"test"} = "testing";

}

编辑: 要解决您的代码问题,请执行以下操作: my(%params) = %{$_[0]};

您实际上正在制作%{...}参考文献的副本。 你可以通过一个细分的例子看到这个(没有功能,相同的功能): my %hash = ( "foo" => "foo...

一些事情要开始: 这不是你如何定义哈希: my %datarow1 = {"firstname"=> "dave", "bar"=>"smith"};

这行代码为哈希分配一个哈希引用,这会产生如下结构: ( 'HASH(0x7f4ef0545e18)' => undef )

可能不是你想要的。 要正确定义哈希,请用括号替换花括号: my %datarow1 = ("firstname"=> "dave", "bar"=>"smith");

始终启用严格模式和警告: use strict;

u...

当你有一个数组引用时,例如$ x = ['a','b','c'],你可以用两种方式取消引用它。 print $x->[0]; # prints a

print $x->[1]; # prints b

print $x->[2]; # prints c

@y = @{$x}; # convert the array-ref to an array (copies the underlying array)

print $y[0]; # prints a

print $y[1]; # prints ...

初始化空哈希引用。 #!/usr/bin/perl

use warnings;

use strict;

my $Hash = {};

Init($Hash);

printf("Value:%d\n",$Hash->{Key});

sub Init

{

my ($Hash) = @_;

$Hash->{Key}=10;

}

Initialize an empty hash reference. #!/usr/bin/perl

use warnings;

use stri...

my $var1=[{'a'=>'1','b'=>'2'},1];

$ var1是数组引用,它包含索引0处的哈希引用和索引1处的标量 要将$ var1引入数组,我们必须使用@ $ var1。(它给出了2元素数组)并且为了访问单个元素,我们必须使用$$ var1 [0]或$ var1 - > [0]。 并且$ var1 - > [0]是一个哈希引用。 要取消它,我们必须使用$ var1 - > [0] {'a'}。 但声明“@ $ var1 - > {'a'}”无效,因为 散列引用出现在数组“@ ...

相关文章

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储

...

问题是这样的 我有一个表 option ,有两个字段 key value 我在rails里

...

一致性hash和solr千万级数据分布式搜索引擎中的应用 互联网创业中大部分人都是草根创业,这

...

public class DBUtils { private String jdbcDriver; p

...

互联网创业中大部分人都是草根创业,这个时候没有强劲的服务器,也没有钱去买很昂贵的海量数据库。在这样严峻

...

互联网创业中大部分人都是草根创业,这个时候没有强劲的服务器,也没有钱去买很昂贵的海量数据库。在这样严峻

...

以下是ruby-doc.org http://www.ruby-doc.org/core/class

...

定长数组 最简单的数组创建如下,记住方括号在Scala中用做泛型,相当于<>在Java中作用。 定义1

...

Java 数组 数组对于每一门编辑应语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处

...

Script.NET Perl解释器的代码已经提交到GitHub网站。GitHub项目地址: http

...

最新问答

如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型

这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;

问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是

我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar

Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/

你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar

这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值