Perl 在散列中推送值

Perl push values in a hash

我总是很困惑或者不知道如何在 perl 中处理散列。

问题来了,

考虑到整个事情,我正在尝试更改以下哈希中的键名。

my %hash_new = {
  'customername' => 'Lee & toys',
  'employee_name' => 'Checngwang',
  'customer_id' => 'X82349K',
  'customer_address' => 'classic denver ranch, meadows drive',
  'types' => 'category la',
};

my %selectCols = ('customername' => 'CUSTOMERNAME','employee_name' => 'EMP_NAME','customer_id' => 'cusid','customer_address' => 'cusaddr','types' => 'Typs');

my %new_hash = ();

foreach my $hash_keys (keys %hash_new){
   my $newKey = $selectCols{$hash_keys};
   $new_hash{$newKey} = $hash_new{$hash_keys};
}

print Dumper %new_hash;

%new_hash 的输出类似于如下连续字符串的键值组合,

CUTOMERNAMELee & toysEMP_NAMEChecngwangcus_idX82349Kcusaddrclassic denver ranch, meadows driveTypscategory la

但我需要的不是这个,而是像这样的散列,

$VAR1 = {
      'CUSTOMERNAME' => 'Lee & toys',
      'EMP_NAME' => 'Checngwang',
      'cusid' => 'X82349K',
      'cusaddr' => 'classic denver ranch, meadows drive',
      'Typs' => 'category la',
    };

请帮我解决这个问题!

如果我对你的理解是正确的,那么这是可行的:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;


my %hash_new = (
  'customername' => 'Lee & toys',
  'employee_name' => 'Checngwang',
  'customer_id' => 'X82349K',
  'customer_address' => 'classic denver ranch, meadows drive',
  'types' => 'category la'
);

my %selectCols = (
  'customername' => 'CUSTOMERNAME',
  'employee_name' => 'EMP_NAME',
  'customer_id' => 'cusid',
  'customer_address' => 'cusaddr',
  'types' => 'Typs'
);

my %new_hash = ();

foreach my $hash_keys (keys %hash_new){
   my $newKey = $selectCols{$hash_keys};
   $new_hash{$newKey} = $hash_new{$hash_keys};
}

print Dumper \%new_hash;

我在您的代码中更改的唯一代码是在 %hash_new 中使用 () 而不是 {} 并转义了 Dumper 语句中的 %% 应该被转义,因为 Dumper 需要一个引用,而不是散列(对于与 Dumper 一起使用的所有其他 Perl 变量类型也是如此)。

输出:

$VAR1 = {
      'Typs' => 'category la',
      'cusaddr' => 'classic denver ranch, meadows drive',
      'EMP_NAME' => 'Checngwang',
      'cusid' => 'X82349K',
      'CUSTOMERNAME' => 'Lee & toys'
    };

此外,不要使用易混淆的名称,例如 %hash_new%new_hash。这 - 嗯 - 令人困惑。