my %data; { my $in = 0; my %rec; while (<DATA>) { if (/^\s*{/) { $in = 1; next; } if (/^\s*}/) { my $name = delete($rec{Name}); $data{$name} = { %rec }; undef %rec; $in = 0; next; } if ($in) { if (/^\s*(\S+)\s*=\s*"(.*)"/) { $rec{$1} = $2; } } } } require Data::Dumper; print(Data::Dumper::Dumper(\%data));
outputs
$VAR1 = { 'C:' => { 'Size' => '160031014912', 'FreeSpace' => '114151464960' }, 'D:' => { 'Size' => '203921108992', 'FreeSpace' => '5515554816' }, 'H:' => { 'Size' => '400086708224', 'FreeSpace' => '43128733696' } };
You could also use the .. operator:
my %data; { my %rec; while (<DATA>) { if (/^\s*{/ .. /^\s*}/) { if (/^\s*{/) { next; } if (/^\s*}/) { my $name = delete($rec{Name}); $data{$name} = { %rec }; undef %rec; next; } if (/^\s*(\S+)\s*=\s*"(.*)"/) { $rec{$1} = $2; } } } } require Data::Dumper; print(Data::Dumper::Dumper(\%data));
In reply to Re: Pulling data out of { }
by ikegami
in thread Pulling data out of { }
by Felix2000
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |