Perl是否具有可以包含任何类型键的关联数组类型?

use*_*702 5 mapping perl hash types associative

似乎Perl只能将字符串作为哈希的键.(在某个版本的Perl中是否已经更改了?)仅限于能够使用字符串作为键是非常有限的.如果我想要一个对象或一个数组作为关键怎么办?在Python中,很容易使用数组,元组和其他可以比较的对象,如dict键.Perl确实能够比较数组之类的东西是否相等,所以我不明白为什么它们不能用作映射类型键.

是不是有办法在Perl中使用任何键类型?有没有提供此功能的模块?

zou*_*oul 3

AFAIK Perl 只是将键字符串化?

package Foo;

use Moose;
use overload ('""' => \&stringify);

sub stringify {
    return "xxx";
}

package main;

use v5.10;
use Data::Dump 'pp';

my $foo = Foo->new;
my $hash = {$foo => 'bar'};
say pp($hash); // { xxx => "bar" }
Run Code Online (Sandbox Code Playgroud)

这样你也可以使用任何你想要的作为哈希键。另请参阅Perl Monks 上的这个帖子

至于相等性,请查看perlop 中的相等运算符。运算==符进行数值比较,eq运算符进行字符串比较。这意味着 example(4, 2) == (1, 2)是 true (as scalar (4, 2)is 2),这可能会让您感到惊讶。