我正在尝试为我创建的类覆盖相等 (==) 运算符,但我现在遇到了一个问题,我看不到出路。任何帮助将不胜感激。
这是new()
该课程的子:
sub new
{
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = {@_};
bless($self, $class);
return $self;
}
这是相等运算符重载:
use overload ('==' => \&compare);
sub compare
{
my ($lhs, $rhs, $swap) = @_;
my $lhsSize = keys(%{$lhs});
my $rhsSize = keys(%{$rhs});
if($lhsSize != $rhsSize) { return 0; } # If objects don't have the same number of fields, they cannot be identical
while (my ($lhsKey, $lhsValue) = each(%{$lhs})) # Loop through the fields
{
my $rhsValue = %{$rhs}->{$lhsKey};
print("Key: $lhsKey Comparing $lhsValue with $rhsValue");
if($rhsValue ne $lhsValue)
{
return 0;
}
}
return 1;
}
在这里,我得到第Using a hash as a reference is deprecated at Cashflow.pm line 43.
43 行所在的错误my $rhsValue = %{$rhs}->{$lhsKey};
。然后我发现这个线程建议解决方案是删除->
但如果我将行更改为my $rhsValue = %{$rhs}{$lhsKey};
我得到语法错误。
您可能会说,我不是 Perl 专家,但我不明白为什么这不起作用。
提前感谢您的帮助。
标记