Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 定义新数据结构时使用引用连接数组_Arrays_Perl - Fatal编程技术网

Arrays 定义新数据结构时使用引用连接数组

Arrays 定义新数据结构时使用引用连接数组,arrays,perl,Arrays,Perl,我的第一个帖子:) 我不确定这是否可能,但我想知道 给定以下代码 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %email_addresses = ( 'fred' => [ '"Fred Blogs" <fred.blogs@domain.com>', '"Fred Blogs" <fred.blogs@hotmail.com>'

我的第一个帖子:)

我不确定这是否可能,但我想知道

给定以下代码

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my %email_addresses = (
    'fred' => [
        '"Fred Blogs" <fred.blogs@domain.com>',
        '"Fred Blogs" <fred.blogs@hotmail.com>'
    ],
    'jane' => [
        '"Jane Smith" <jane.smith@domain.com>',
        '"Jane Smith" <jane.smith@hotmail.com>',
        '"Jane Smith" <jane.smith@somwhere.com>'
    ],
    'tom' => [
        '"Tom Jones" <tom.jones@domain.com>'
    ]
);

my %recipients = (
    'success' => [
        $email_addresses{'fred'},
        $email_addresses{'jane'}
    ],
    'failure' => [
        $email_addresses{'tom'}
    ]
);

print Data::Dumper->Dump([\%recipients], ['recipients']);
现在有个问题。。。我想知道这是否可以在我定义
my%recipients
-一条语句中完成

我知道在定义之后,我可以使用附加语句以编程方式实现我想要的,但我很想知道它是否可以在一个过程中完成。我尝试了()、[]、{}和取消引用的各种组合,但都没有效果


谢谢大家。

您实际上是想将数组引用列表展平。是的,这很容易做到

我建议您只需使用map并传递一个您想要翻译的密钥列表,如下所示:

use strict;
use warnings;

use Data::Dumper;

my %email_addresses = (
    'fred' => [
        '"Fred Blogs" <fred.blogs@domain.com>',
        '"Fred Blogs" <fred.blogs@hotmail.com>',
    ],
    'jane' => [
        '"Jane Smith" <jane.smith@domain.com>',
        '"Jane Smith" <jane.smith@hotmail.com>',
        '"Jane Smith" <jane.smith@somwhere.com>',
    ],
    'tom' => [
        '"Tom Jones" <tom.jones@domain.com>',
    ]
);

my %recipients = (
    'success' => [map @{$email_addresses{$_}}, qw(fred jane)],
    'failure' => [map @{$email_addresses{$_}}, qw(tom)],
);

print Data::Dumper->Dump([\%recipients], ['recipients']);
使用严格;
使用警告;
使用数据::转储程序;
我的%电子邮件地址=(
“弗雷德”=>[
“弗雷德博客”,
“弗雷德博客”,
],
“简”=>[
“简·史密斯”,
“简·史密斯”,
“简·史密斯”,
],
“汤姆”=>[
“汤姆·琼斯”,
]
);
我的%recipients=(
'success'=>[map@{$email_addresses{$},qw(fred jane)],
'failure'=>[map@{$email_addresses{$},qw(tom)],
);
打印数据::转储程序->转储([\%recipients],'recipients']);
产出:

$recipients = {
                'success' => [
                               '"Fred Blogs" <fred.blogs@domain.com>',
                               '"Fred Blogs" <fred.blogs@hotmail.com>',
                               '"Jane Smith" <jane.smith@domain.com>',
                               '"Jane Smith" <jane.smith@hotmail.com>',
                               '"Jane Smith" <jane.smith@somwhere.com>'
                             ],
                'failure' => [
                               '"Tom Jones" <tom.jones@domain.com>'
                             ]
              };
$recipients={
“成功”=>[
“弗雷德博客”,
“弗雷德博客”,
“简·史密斯”,
“简·史密斯”,
“简·史密斯”
],
“失败”=>[
“汤姆·琼斯”
]
};

太棒了!我没想到要用地图。非常感谢。
Data::Dumper
?米勒?你是谁<代码>:P可爱:是的,我可能有一个近乎宗教的偏好,因为它的优越格式。但我有时会看到核心库,特别是如果OP在他们的帖子中使用它的话@杰帕尔:我没有理解你关于
Data::Dumper
的评论的上下文。使用它有什么问题吗?@protogen抱歉,这对米勒来说是个断章取义的玩笑。Data::Dumper没有问题。这是一个很棒的模块。Miller通常更喜欢在他的答案中使用Data::Dump(另一个类似于Data::Dumper的有用模块)。
use strict;
use warnings;

use Data::Dumper;

my %email_addresses = (
    'fred' => [
        '"Fred Blogs" <fred.blogs@domain.com>',
        '"Fred Blogs" <fred.blogs@hotmail.com>',
    ],
    'jane' => [
        '"Jane Smith" <jane.smith@domain.com>',
        '"Jane Smith" <jane.smith@hotmail.com>',
        '"Jane Smith" <jane.smith@somwhere.com>',
    ],
    'tom' => [
        '"Tom Jones" <tom.jones@domain.com>',
    ]
);

my %recipients = (
    'success' => [map @{$email_addresses{$_}}, qw(fred jane)],
    'failure' => [map @{$email_addresses{$_}}, qw(tom)],
);

print Data::Dumper->Dump([\%recipients], ['recipients']);
$recipients = {
                'success' => [
                               '"Fred Blogs" <fred.blogs@domain.com>',
                               '"Fred Blogs" <fred.blogs@hotmail.com>',
                               '"Jane Smith" <jane.smith@domain.com>',
                               '"Jane Smith" <jane.smith@hotmail.com>',
                               '"Jane Smith" <jane.smith@somwhere.com>'
                             ],
                'failure' => [
                               '"Tom Jones" <tom.jones@domain.com>'
                             ]
              };