Perl: 'map' 的散列分配如何工作?

标签 perl hash variable-assignment

我无法理解如何使用 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
        };

为什么散列中只有一个空字符串?如果我分配给一个数组

我的@a = map {$_ if $_>2} (1..4);

$VAR1 = [
          '',
          '',
          3,
          4
        ];

我得到两个空字符串,这对我来说更有意义。

如果不满足条件,是否有可能不返回空字符串?

最佳答案

尽管 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
        };

关于Perl: 'map' 的散列分配如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27962872/

相关文章:

c - 使用 perl XS 链接到 C 共享库

node.js - 如何使用nodejs验证Symfony2 sha512密码

delphi - 在 Delphi 中将 GetHashCode 的 double 转换为整数

javascript - 在一条语句中声明多个变量

perl - 是否可以在 Perl 应用程序中打开 Perl 的 -d 标志并将其应用于自身?

perl - 使用perl,有没有办法打开gzip文件并读取行而不完全解压缩?

regex - 与 (foo|bar|baz) 相反

Swift Hashing 算法使用位移来避免冲突

Javascript 多变量赋值

c++ - C++17 中的数组赋值