[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>