package HashRef; # # $Id: HashRef.pm,v 1.6 2001/12/19 08:52:33 white Exp $ # sub new{ my $class = shift; my $hashref = shift; return bless $hashref , HashRef; } sub dump{ # no test written; my($FILE,$hash,$value); my $self = shift; $FILE = shift || STDOUT; my $separator = shift || ':'; # output order by key foreach $hash (@$self{sort {$a <=> $b || $a cmp $b } keys %$self}){ print "\n"; foreach $key (keys %$hash){ $hash->{$key} =~ s/\r//sg; $hash->{$key} =~ s/\n/\\n/sg; print "$key$separator$hash->{$key}\n"; } } return $self; } sub undump{ my($key,@dump) = @_; my %hashref; my %hash; foreach (@dump){ if(/^$/){ $hashref{$hash{$key}} = {%hash}; undef %hash; next; }elsif(/^(.*?):(.*)$/){ my($k,$v) = ($1,$2); $v =~ s/\\n/\n/g; $hash{$k} = $v; } } $hashref{$hash{$key}} = {%hash}; undef %hash; return bless \%hashref , HashRef; } sub each{# no test written; my $self = shift; my($func,@args) = @_; foreach $hash (values %$self){ &$func($hash,@args); } return $self; } sub set{ my $self = shift; my($key,$value) = @_; foreach $hash (values %$self){ $hash->{$key} = $value; } return $self; } sub print_hashref{# no test written; my($hash) = shift; my($h,$k); foreach $h (values %$hash){ print "---\n"; foreach $k (keys %$h){ print "$k = $h->{$k}\n"; } } return $self; } sub Jcode{# no test written; my $self = shift; my($key,$hash); foreach $hash (values %$self){ foreach $key (keys %$hash){ &Jcode::convert(\$hash->{$key},@_); } } return $self; } sub joinField{ my $self = shift; my($to,$from,$separator) = @_; my($hash); $separator ||= "\n"; foreach $hash (values %$self){ $hash->{$to} = join($separator,@$hash{$to,$from}); delete $hash->{$from}; } return $self; } sub merge{ my $self = shift; my($hashref) = @_; foreach $key (keys %$self){ foreach $field (keys %{$hashref->{$key}}){ $self->{$key}->{$field} = $hashref->{$key}->{$field}; } } return $self; } sub cleanUndef{ my $self = shift; my($key) = @_; my($reckey,$hash); foreach $reckey (keys %$self){ if($self->{$reckey}->{$key} eq undef){ delete $self->{$reckey}; } } return $self; } 1;