Perl 哈希、数组和引用

标签 perl hash reference

我在子程序中有这 3 行代码,我试图将它们一起写在一行上..但我完全迷失了

    my %p = @_;
    my $arr = $p{name};
    my @a = @$arr;

正确的做法是什么?

谢谢!

最佳答案

my %p = @_;

@_ 假定包含键值对,然后使用这些键值对构建哈希 %p

my $arr = $p{name};

假定参数列表包含类似于 name, [1, 2, 3,] 的内容,因此 $p{name} 是一个引用到一个数组。

my @a = @$arr;

取消引用该数组引用以获取数组@

这里是一个可以在 sub 中使用此前奏的调用:

func(this => 'that', name => [1, 2, 3]);

如果您想将整个前奏简化为单个语句,您可以使用:

my @a = @{ { @_ }->{name} };

如:

#!/usr/bin/env perl

use strict;
use warnings;

use YAML::XS;

func(this => 'that', name => [1, 2, 3]);

sub func {
    my @a = @{ { @_ }->{name} };
    print Dump \@a;
}

输出:

---
- 1
- 2
- 3

If the array pointed to by name is large, and if you do not need a shallow copy, however, it may be better to just stick with references:

my $aref = { @_ }->{ name };

关于Perl 哈希、数组和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35604549/

相关文章:

perl - 未记录的Perl变量%_?

perl - 如何使用perl处理格式类似于unicode的文件?

c++ - 如何在 Hasher 中使用非静态成员函数?

html - 跳转到哈希的 anchor 标记不起作用

perl - Perl可以解析 "statically"吗?

regex - 使用命名子表达式时是否可以复制 %+ 哈希?

java - 检查 XADES 标志的哈希值

javascript - 引用php页面上的位置

c - C中如何存储变量值?

java - 每当我添加一个对象时,它就会出现在屏幕的一角