Thanks everybody...here is the final code I crafted from my original and your suggestions.
#!/usr/bin/perl use warnings; use strict; my $ca_path = "log_ca.txt"; my $aa_path = "log_aa.txt"; my %final_report; my @ca_filenames; my @aa_filenames; open (CAFILE, $ca_path) or die $!; my @ca_files = <CAFILE>; open(AAFILE, $aa_path) or die $!; my @aa_files = <AAFILE>; #sort arrays my @ca_files_sorted = sort @ca_files; my @aa_files_sorted = sort @aa_files; my $total_items = @ca_files_sorted; foreach(@ca_files_sorted){ s/\s+\z//; # Remove all trailing whitespace push @ca_filenames, /\d+->(.+)/; } foreach(@aa_files_sorted){ s/\s+\z//; # Remove all trailing whitespace push @aa_filenames, /\d+->(.+)/; } for (1..$total_items){ $final_report{ pop @ca_filenames } = pop @aa_filenames; } print "CA FILENAME => AA_FILENAME\n"; print '-' x 27, "\n"; foreach (sort { $a cmp $b } keys(%final_report) ){ print "$_ => $final_report{$_}\n"; } Now it prints the output just fine. Thanks again. On Apr 24, 2:12 am, [EMAIL PROTECTED] (John W. Krahn) wrote: > icarus wrote: > > I have two files: log_ca.txt and log_aa.txt > > contents of log_ca.txt: > > > 333333333->ca_filename3 > > 444444444->ca_filename4 > > 111111111->ca_filename1 > > 222222222->ca_filename2 > > > contents of log_aa.txt: > > > 111111111->aa_filename1 > > 333333333->aa_filename3 > > 222222222->aa_filename2 > > 444444444->aa_filename4 > > > The program extracts the values after the -> delimiter of both files > > Makes an association between the values on both of the files. > > > Meaning, this is desired output: > > > CA FILENAME => AA_FILENAME > > --------------------------- > > ca_filename1 => aa_filename1 > > ca_filename2 => aa_filename2 > > ca_filename3 => aa_filename3 > > ca_filename4 => aa_filename4 > > > Outputs I'm getting > > (see "double pop" in code below for details) > > > CA FILENAME => AA_FILENAME > > --------------------------- > > => > > ca_filename3 => aa_filename3 > > ca_filename4 => aa_filename4 > > > and > > > (after adding the "double pop" below prints all records but still get > > the => delimiter) > > CA FILENAME => AA_FILENAME > > --------------------------- > > => > > ca_filename1 => aa_filename1 > > ca_filename2 => aa_filename2 > > ca_filename3 => aa_filename3 > > ca_filename4 => aa_filename4 > > > Questions: > > How do I get the desired output without resorting to the 'double pop'? > > How do I get rid of the extra "=>"? > > > Thanks in advance. > > > #!/usr/bin/perl > > use warnings; > > use strict; > > > my $ca_path = "log_ca.txt"; > > my $aa_path = "log_aa.txt"; > > > my %final_report; > > my @ca_filenames; > > my @aa_filenames; > > > open (CAFILE, $ca_path) or die $!; > > my @ca_files = <CAFILE>; > > > open(AAFILE, $aa_path) or die $!; > > my @aa_files = <AAFILE>; > > > #sort arrays > > my @ca_files_sorted = sort @ca_files; > > my @aa_files_sorted = sort @aa_files; > > > my $total_items = @ca_files_sorted; > > > foreach(@ca_files_sorted){ > > s/[\r\t\n]+//; #Remove carriage returns and new lines > > my @temp = split (/\d+->/, $_); > > Assuming that $_ contains '111111111->ca_filename1' then @temp now > contains ( '', 'ca_filename1' ). > > > push @ca_filenames, @temp; > > } > > At the end of the loop @ca_filenames will contain: > > ( '', 'ca_filename1', '', 'ca_filename2', '', 'ca_filename3', '', > 'ca_filename4' ) > > You need to store only the string after /\d+->/: > > foreach ( @ca_files_sorted ) { > s/\s+\z//; # Remove all trailing whitespace > push @ca_filenames, /\d+->(.+)/; > > } > > foreach(@aa_files_sorted){ > > s/[\r\t\n]+//; #Remove carriage returns and new lines > > my @temp = split (/\d+->/, $_); > > push @aa_filenames, @temp; > > } > > As above, at the end of the loop @aa_filenames will contain: > > ( '', 'aa_filename1', '', 'aa_filename2', '', 'aa_filename3', '', > 'aa_filename4' ) > > > ###problems start here > > #why do I need to put [EMAIL PROTECTED] twice? > > Because @ca_filenames has twice as many elements as @ca_files_sorted > (where $total_items was derived from.) > > > #otherwise it won't display all items. > > #I don't put that this is the outcome. > > #CA FILENAME => AA_FILENAME > > # => > > #ca_filename3 => aa_filename3 > > #ca_filename4 => aa_filename4 > > > for (1..$total_items){ > > $final_report{ pop @ca_filenames } = pop @aa_filenames; > > $final_report{ pop @ca_filenames } = pop @aa_filenames; > > } > > And so you end up with a hash that has a key '' and a corresponding > value ''. > > You could accomplish the same thing more simply with a hash slice (no > loop required): > > @final_report{ @ca_filenames } = @aa_filenames; > > > #why do I get the '=>' symbol there? > > print "CA FILENAME => AA_FILENAME\n"; > > foreach (sort { $a cmp $b } keys(%final_report) ){ > > print "$_ => $final_report{$_}\n"; > > } > > John > -- > Perl isn't a toolbox, but a small machine shop where you > can special-order certain sorts of tools at low cost and > in short order. -- Larry Wall -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/