in reply to hash help
First off a few general coding tips:
Always use the three parameter version of open, always check the result and always lexical file handles. Taking all that into account an open statement becomes:
open my $file1In, '<', $file1 or die "Failed to open $file1: $!";
Always use strictures (use strict; use warnings;). if (($pr1{$key1} = $sil{$key._ref1}) ... may be a copy error, but it is wrong on two counts. Perl's numeric equality operator is == (assignment within an if expression is a really bad idea btw), and you actually want a string compare, not a numeric compare, so you should be using eq.
Something like the following may be what you want:
use strict; use warnings; my $file1 = <<END_FILE1; Bbbb,3333,4444 Cdd,3444,3444 Zddd,345,456 END_FILE1 my $file2 = <<END_FILE2; Bbbb_rf1,23,45 Cdd_rf2,24.45 Zddd,34,456.4 END_FILE2 my %concat; open my $file1In, '<', \$file1 or die "Failed to open file1: $!"; while (<$file1In>) { chomp; my ($key, @tail) = split ','; next if ! @tail; $concat{$key} = \@tail; } close $file1In; open my $file2In, '<', \$file2 or die "Failed to open file2: $!"; while (<$file2In>) { chomp; my ($key, @tail) = split ','; next if ! @tail or $key !~ s/_(\w*)$// or $1 ne 'rf1'; push @{$concat{$key}}, @tail; print join (',', $key, @{$concat{$key}}), "\n"; } close $file2In;
Prints:
Bbbb,3333,4444,23,45
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: hash help
by bkish11 (Novice) on Jun 29, 2009 at 04:25 UTC | |
by GrandFather (Saint) on Jun 29, 2009 at 04:44 UTC |