use*_*702 5 mapping perl hash types associative
似乎Perl只能将字符串作为哈希的键.(在某个版本的Perl中是否已经更改了?)仅限于能够使用字符串作为键是非常有限的.如果我想要一个对象或一个数组作为关键怎么办?在Python中,很容易使用数组,元组和其他可以比较的对象,如dict键.Perl确实能够比较数组之类的东西是否相等,所以我不明白为什么它们不能用作映射类型键.
是不是有办法在Perl中使用任何键类型?有没有提供此功能的模块?
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),这可能会让您感到惊讶。