Perl:'map' 的散列赋值如何工作?
Perl: How does hash assignment with 'map' work?
我无法理解如何使用 map
函数分配给哈希值。
为什么
my %a = map {$_=>1 if $_>=2} (1..4);
在
时给我一个 Odd number of elements in hash assignment
错误
my %a = map {$_=>1 if $_>2} (1..4);
给我
$VAR1 = {
'' => '',
'4' => 1,
'3' => 1
};
为什么散列中只有一个空字符串?如果我分配给一个数组
my @a = map {$_ if $_>2} (1..4);
$VAR1 = [
'',
'',
3,
4
];
我得到两个空字符串,这对我来说更有意义。
有没有可能return不满足条件就没有空串?
map
将一个列表转换为另一个列表。在第一种情况下,您的输入列表是 1, 2, 3, 4
。对于每个成员,如果该成员是 >= 2
,则您 return 一个元组,否则,您 return 只是一个值。单个值仅对 1 进行 returned,并导致 "odd number of elements".
在第二种情况下,转换工作如下:
input | output
------+-------
1 | ''
2 | ''
3 | 3 => 1
4 | 4 => 1
如果从中进行散列,则将第一个空字符串作为键,将第二个空字符串作为值,这将创建 "one empty string in the hash" - 实际上有两个。
虽然 map
不是完成这项工作的最佳方式(grep
正如所指出的那样会更好),但仍然可以仅使用 map 与 ?
比较:
#!/usr/bin/perl
use strict ;
use warnings ;
use Data::Dumper ;
my %a = map { $_>2 ? ( $_ => 1 ) : () } (1..4) ;
print Dumper( \%a ) ;
返回空列表会使 map
在不满足条件时表现得像 grep
。
>perl test.pl
$VAR1 = {
'4' => 1,
'3' => 1
};
我无法理解如何使用 map
函数分配给哈希值。
为什么
my %a = map {$_=>1 if $_>=2} (1..4);
在
时给我一个Odd number of elements in hash assignment
错误
my %a = map {$_=>1 if $_>2} (1..4);
给我
$VAR1 = {
'' => '',
'4' => 1,
'3' => 1
};
为什么散列中只有一个空字符串?如果我分配给一个数组
my @a = map {$_ if $_>2} (1..4);
$VAR1 = [
'',
'',
3,
4
];
我得到两个空字符串,这对我来说更有意义。
有没有可能return不满足条件就没有空串?
map
将一个列表转换为另一个列表。在第一种情况下,您的输入列表是 1, 2, 3, 4
。对于每个成员,如果该成员是 >= 2
,则您 return 一个元组,否则,您 return 只是一个值。单个值仅对 1 进行 returned,并导致 "odd number of elements".
在第二种情况下,转换工作如下:
input | output
------+-------
1 | ''
2 | ''
3 | 3 => 1
4 | 4 => 1
如果从中进行散列,则将第一个空字符串作为键,将第二个空字符串作为值,这将创建 "one empty string in the hash" - 实际上有两个。
虽然 map
不是完成这项工作的最佳方式(grep
正如所指出的那样会更好),但仍然可以仅使用 map 与 ?
比较:
#!/usr/bin/perl
use strict ;
use warnings ;
use Data::Dumper ;
my %a = map { $_>2 ? ( $_ => 1 ) : () } (1..4) ;
print Dumper( \%a ) ;
返回空列表会使 map
在不满足条件时表现得像 grep
。
>perl test.pl
$VAR1 = {
'4' => 1,
'3' => 1
};