John, this code didn't work for me. Although I did have to change <DATA> to <RD>; ----- Original Message ----- From: "John W. Krahn" <[EMAIL PROTECTED]> To: < > Sent: Friday, April 02, 2004 7:47 PM Subject: Re: Hash ref's of hash's
> [EMAIL PROTECTED] wrote: > > > > Hi all, > > Hello, > > > I am trying to setup a hash who's values are referance to hash's. Data > > structure should look like this > > > > hash > > 1: > > setting 1 > > setting 2 > > 2: > > setting 1 > > setting 2 > > .... > > > > I would think it can be accomplished with following code, but when I try > > to print it out it only prints the last setting which it read. Any idea's ?? > > > > CODE: > > #!perl -w > > use strict; > > open RD, "input.txt"; > > > > my ( $field,$portsetting, $value, $port, $portnum, %digi, $debug ); > > $debug=0; > > > > while ( <RD> ) { > > if(m/^(port)\s\=\s(.*)$/i){$portnum=$2;$portnum++} > > > > $field = {}; > > $digi{$portnum} = $field; > > > > m/^(.*)\s\=\s(.*)$/; > > $portsetting=$1; > > $value=$2; > > $field->{$portsetting}=$value; > > > > print "setting $portsetting -> $digi{$portnum}{$portsetting}\n" if $debug; > > > > if($portsetting eq 'porttitle'){ > > $value =~ tr /-/ /; > > $value =~ m/^(\w+)\s+(\w+)/i; > > $field->{$portsetting}=$1; > > $field->{'type'}=$2; > > print "1:$digi{$portnum}{$portsetting}\t2:$digi{$portnum}{'type'}\n" if $debug; > > } > > > > } > > > > # print the whole thing > > foreach $port ( keys %digi ) { > > print "$port: { "; > > for $field ( keys %{ $digi{$port} } ) { > > print "$field=$digi{$port}{$field} "; > > } > > print "}\n"; > > } > > > > Sample DATA > > > > port = 0 > > bmanset = 0 > > benable = 1 > > uarttype = 0 > > baudrate = 9600 > > stopbits = 1 > > databits = 8 > > parity = 0 > > flowcontrol = 0 > > protocol = 1 > > port = 1 > > bmanset = 0 > > benable = 1 > > uarttype = 0 > > baudrate = 9600 > > stopbits = 1 > > databits = 8 > > parity = 0 > > flowcontrol = 0 > > protocol = 1 > > > Perhaps this will do what you want: > > #!perl -w > use strict; > use Data::Dumper; > > open RD, 'input.txt' or die "Cannot open 'input.txt' $!"; > > my ( %data, $temp ); > while ( <DATA> ) { > chomp; > my ( $name, $value ) = split /\s*=\s*/ or next; > if ( exists $temp->{ $name } or eof DATA ) { > $data{ $temp->{ port } } = $temp; > $temp = { $name, $value }; > next; > } > $temp->{ $name } = $value; > } > > print Dumper \%data; > > __END__ > > > > John > -- > use Perl; > program > fulfillment > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > <http://learn.perl.org/> <http://learn.perl.org/first-response> > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>