in reply to Re: Reading from a flat text file database and storing contents in a hash
in thread Reading from a flat text file database and storing contents in a hash

This is all really good advice, but at the moment I have been playing around with XML::Simple. The problem that I am having is I cannot generate the data structure that I had before with the hash it keeps on putting things in a nested array. This is what I used to have before using XML::Simple
$VAR1 = '1'; $VAR2 = { 'host' => { 'hosta' => 1 }, 'name' => 'servicea' }; $VAR3 = '2'; $VAR4 = { 'host' => { 'host0' => 2, 'host5' => 2 }, 'name' => 'serviceb' };
When using XML::Simple I get this:
$VAR1 = { 'name' => 'servicea', 'host' => [ { 'hosta' => '2' }, { 'hostb' => '2' } ]
I am using the following XML with XML::simple.
<?xml version='1.0'?> <services> <name>servicea</name> <host> <hosta>2</hosta> </host> <host> <hosta>2</hosta> </host> </services>
Is there any way I can change the XML, so XML::simple only uses hash of hashes instead of hashes and arrays? Thanks

Replies are listed 'Best First'.
Re^3: Reading from a flat text file database and storing contents in a hash
by dragonchild (Archbishop) on Apr 20, 2007 at 14:42 UTC
    *sighs* I provide you with a suggestion. You say "That's cool, but can you debug what's wrong with this other mechanism?" XML is a very poor solution for this, which is why I suggested DBM::Deep. dbm-deep is designed to solve this specific problem that you're working with - easy persistence of Perl datastructures.

    Use the proper solution for the job. XML isn't it.


    My criteria for good software:
    1. Does it work?
    2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
      OK I'll stop using the XML::Simple and try DBM::Deep instead. It just looked a bit more complicated, when I glanced at it.
        I think that people look at DBM::Deep and go "It can't be that simple, so it's got to be really hard cause I don't understand it." This is your code, with the changes needed to make it DBM::Deep'ed.
        # First script, to populate the db file: use DBM::Deep; our %services; tie %services, 'DBM::Deep', 'file.db'; %services = ( 1 => { name => "service1", host => { host1 => 1 }, }, 2 => { name => "service2", host => { host0 => 2, host5 => 2 }, }, ); ###################### # Second script, to print the services. our %services; tie %services, 'DBM::Deep', 'file.db'; print "----------------Menu-----------------------------------------\n +"; print "Please enter the number of the service and press return\n"; print "-------------------------------------------------------------\n +"; for $row (sort keys %services){ my $service=$services{$row}; print "$row\t $service->{ name }\n"; } print "Please enter number -->";
        That's it. Note that your usage of %services doesn't change at all.

        My criteria for good software:
        1. Does it work?
        2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?