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>