gpt4 book ai didi

Perl:使重复哈希键的声明成为 fatal error ?

转载 作者:行者123 更新时间:2023-12-03 18:43:03 24 4
gpt4 key购买 nike

Perl 中有没有办法在声明时使重复哈希键的存在成为错误?
例如,对于这样的脚本:
测试.pl

#!/usr/bin/perl

my %hash = (
'a' => 'valid',
'b' => 'valid',
'c' => 'valid',
'a' => 'duplicate'
);
我想在运行时看到这样的东西:
$ perl ./test.pl
duplicate hash key at ./test.pl line 7, near 'a' => 'duplicate'
Execution of ./test.pl aborted due to compilation errors.
理想情况下,我希望保持哈希声明语法相同。有什么办法可以做到这一点吗?

最佳答案

tied hash ,您可以覆盖存储哈希值的机制。

package Hash::DupesNotAllowed;
use Carp;
sub TIEHASH { bless {}, $_[0] } # borrowed from Tie::StdHash
sub FETCH { $_[0]->{$_[1]} }
sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
sub NEXTKEY { each %{$_[0]} }
sub EXISTS { exists $_[0]->{$_[1]} }
sub DELETE { delete $_[0]->{$_[1]} }
sub CLEAR { %{$_[0]} = () }
sub SCALAR { scalar %{$_[0]} }

sub STORE {
my ($self,$key,$value) = @_;
if (exists($self->{$key})) {
croak "Duplicate key '$key'";
}
$self->{$key} = $value;
return;
}
1;


package main;
use Hash::DupesNotAllowed;
my (%h1, %h2, %h3);
tie %h2, 'Hash::DupesNotAllowed';
tie %h3, 'Hash::DupesNotAllowed';

%h1 = (a => 'one', b => 'two', a => 'three'); # ok
%h2 = (a => 'one', b => 'two', c => 'three'); # ok
%h3 = (a => 'one', b => 'two', a => 'three'); # "Duplicate key"

关于Perl:使重复哈希键的声明成为 fatal error ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67145215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com