Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Re: hash, a troublemaker?

by mce (Curate)
on May 12, 2004 at 12:22 UTC ( #352703=note: print w/replies, xml ) Need Help??

in reply to hash, a troublemaker?


Just for the fun of it.

#!/usr/local/bin/perl package MyTie; use Tie::Hash; @ISA=(Tie::ExtraHash); sub STORE { my $self=shift; my $key=shift; my $value=shift; if ( grep /^$key$/, @{$self->[1]} ) { warn "key $key not valid"; return undef; } return $self->[0]{$key}=$value; } 1; package main; use strict; use Data::Dumper; my $rhash; tie %$rhash, 'MyTie', [qw(not ok)]; $rhash->{b}=2; $rhash->{not}=2; warn Dumper($rhash); 1;
Of course, the solutions given above are much better, but isn't perl just a lot of fun.......
Of course, the compiler will not complain on this solution, so it is only a half solution.

Dr. Mark Ceulemans
Senior Consultant
BMC, Belgium

Replies are listed 'Best First'.
Re: Re: hash, a troublemaker?
by davorg (Chancellor) on May 12, 2004 at 12:40 UTC
    Or, from the CPAN Tie::Hash::FixedKeys. (of course, the Hash::Util::lock_keys solution is better.)

    "The first rule of Perl club is you do not talk about Perl club."
    -- Chip Salzenberg

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://352703]
[Corion]: marinersk: Well, I have done select statements like select sum(foo) as "Total Amount", ..., but to have a table like that makes me shudder
[Corion]: SuicideJunkie: :-D
[marinersk]: SuicideJunkie LOL
[choroba]: Woohoo! Fixed a test that hasn't run for 3 years.
[marinersk]: Corion Yes, sometimes whitespace in column headers is acceptable, but I still consider it be less than desireable if that query might get revectored for an ETL-esque process...
[marinersk]: choroba++
[choroba]: it's a long running test, so it's normally skipped unless an env var is set
[choroba]: nobody has been bothered to set the variable in the last 3 years
[marinersk]: sub newtest{my $expected_result = &target('foo'); my $actual_result = &target('foo'); if ($actual_result eq $expected_result) { &tdd_success(); } else { &tdd_fail(); } } # Test works after three years!
[choroba]: or nobody bothered...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (11)
As of 2017-05-25 15:08 GMT
Find Nodes?
    Voting Booth?