in reply to hash of hashes?

I don't know if this is a better or worse solution, but I'm showing you mine (filenames are only an example, chage them if you have to):

#!/usr/bin/perl use strict; use warnings; # Constants my $BLANK_LINE = qr/^\s+$/; my $KEY = qr/>([A-Z]{1})/; # Variables my %content; # Take the data for (<*.db>) { open(FILEDB, $_) or die "Cannot open file $_: $!\n"; my $key; for (<FILEDB>) { if (/$BLANK_LINE/) { next; } elsif (/$KEY/) { $key = $1; if (not $content{$key}) { $content{$key} = (); } } else { chomp; push (@{$content{$key}}, $_); } } close(FILEDB); } # Write the new file open(FILEDB, ">result.db") or die "Cannot open file result.db: $!\n"; for my $key (sort keys %content) { print FILEDB ">$key\n\n" . join(", ", @{$content{$key}}) . "\n\n"; } close(FILEDB);

Replies are listed 'Best First'.
Re^2: hash of hashes?
by muba (Priest) on Jul 09, 2011 at 04:39 UTC

    Two comments to this, though.

    The {1} quantifier in my $KEY = qr/>([A-Z]{1})/; doesn't serve any purpose.

    But more importantly, your solution doesn't offer the dashes for those cases where no records were found for a given letter - something which is part of the original specification.

      doesn't serve any purpose.

      Think of it as a comment, like

      my $Count = scalar @sausages;
      scalar isn't required to force scalar context, since the context is already scalar , as opposed to list context where it is required
      my($Count) = scalar @sausages;
      , but it helps the programmer remember

        Fair enough.

      The {1} quantifier in my $KEY = qr/>(A-Z{1})/; doesn't serve any purpose.

      Mmmm... Yes, I know. I promise I had a good reason to do this, but I cannot remember it right now. Maybe I misunderstood for a moment the greedy effect, I was tired :-).

      ...your solution doesn't offer the dashes for those cases where no records were found for a given letter

      I thought the dashes were a way to specify there could be more data not specified in the example, like ellipsis. Moreover, I saw a similar effect with spaces and I "fixed" it; it's not hard to add them, if they're needed.

        Thanks, You're solution helped quite a bit. The dashes in the example were meant to be there to show missing data in the files.

        Thanks, You're solution helped quite a bit. The dashes in the example are meant to be there to show missing data in the files.