Sure. Here's a script that parses two files and compares the values for each key using List::Compare:

#!/usr/bin/perl use strict; use warnings; use feature qw/say/; use List::Compare; use List::AllUtils qw/uniq/; sub parse_file($) { my ($filename) = @_; open my $filehandle, "<", $filename or die "Could not open $filename: $!"; my %parsed = (); while(<$filehandle>) { chomp; my ($key, $values) = split "=", $_, 2; my @values = split ",", $values; $parsed{$key} = \@values; } return \%parsed; } my %parsed_file1 = %{ parse_file "File1" }; my %parsed_file2 = %{ parse_file "File2" }; foreach my $key (sort { $a cmp $b } uniq (keys %parsed_file1, keys %pa +rsed_file2)) { my $listcompare = List::Compare->new($parsed_file1{$key} // [] +, $parsed_file2{$key} // []); my @added_values = $listcompare->get_Ronly; my @removed_values = $listcompare->get_Lonly; my @retained_values = $listcompare->get_intersection; say $key; say "\tValues added : ", join ", ", @added_values; say "\tValues removed : ", join ", ", @removed_values; say "\tValues retained: ", join ", ", @retained_values; }

Here's my File1:

B23168=AOL,ABC permitted_mac_attempts=1,DEF B23167=Carphone Warehouse TalkTalk,23 B23163=Orange,Red,Blue,Green,White,Black B23970=O2 APPLE=FRITTER

And my File2:

B23168=AOL,ABC,DEF,EFG permitted_mac_attempts=1,DEF,34,4 B23167=Carphone Warehouse TalkTalk,23,5,6 B23163=Orange,Red,Blue,Green,Yellow B23970=O2,56 PONY=EARTH

Using these, the script outputs:

$ perl 1119397.pl APPLE Values added : Values removed : FRITTER Values retained: B23163 Values added : Yellow Values removed : Black, White Values retained: Blue, Green, Orange, Red B23167 Values added : 5, 6 Values removed : Values retained: 23, Carphone Warehouse TalkTalk B23168 Values added : DEF, EFG Values removed : Values retained: ABC, AOL B23970 Values added : 56 Values removed : Values retained: O2 PONY Values added : EARTH Values removed : Values retained: permitted_mac_attempts Values added : 34, 4 Values removed : Values retained: 1, DEF $

Writing to a CSV file is left as an exercise for the reader (I don't know how you want your CSV file to look anyway), but I'd strongly suggest using Tux's excellent Text::CSV module.


In reply to Re^6: How to assign an array to a value in hash? by AppleFritter
in thread Re: How to assign an array to a value in hash? by vukotid

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.