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>


Reply via email to