Dear Monks

I complex Hash for which I'm experiencing a problem.

The Problem:
Loop through the Hash items(sub keys)like "13304_21114.01", and if similar key(s) found append the filename of the
second subkey to the first element of the value, i,e for example:

if I find a similar sub key of "13341_27276.01" the value should be updated as :
%csv_data = ( '13341_27276.01' => 'BMVG_ACE.txt / SCVG_ACE.txt / SC_ACE.txt|CONF +IRMED|13304|21114.01|20060602|20060530|2261957|US2471311058|DELGI GRO +UP|DELGI GROUP|US/ USD|US/ USD|DFG UN Eq|STK_DIV|Stock dividend / + Bonus|28616000.000000|42924000.000000|||1.000000|1.000000|[3] / [2]| +|S 1 : 2|||||40301020|40301020|Life & Health |Life & Health |', '13304_21114.01' => 'BMVG_ACE.txt / SC_ACE.txt|CONFIRMED|13304|211 +14.01|20060602|20060530|2261957|US2471311058|DELGI GROUP|DELGI GROUP| +US/ USD|US/ USD|DFG UN Eq|STK_DIV|Stock dividend / Bonus|28616000 +.000000|42924000.000000|||1.000000|1.000000|[3] / [2]||S 1 : 2||||| +40301020|40301020|Life & Health |Life & Health |', '10291_24687.01' => 'BMVG_ACE.txt|CONFIRMED|10291|24687.01|2006060 +2|20060601|2227584|US4534141043|INDEPENDENCE CMNTY ||US/ USD|/|ICBC + UQ Eq|ACQ|Agreement: cas|82332000.000000||||0.900000|||||||||401020 +10||Thrifts & Mortgage Finance||', );
its because the sub key of 13341_27276.01 is seen first in BMVG_ACE.txt. If the subkey is not found in other files it should also be maintained within the hash
with its original value as given in the above example. The final Hash is the output I should be writing to a file.
Below is the hash which contains the sample data:
%csv_data = ( 'BMVG_ACE.txt' => { '13304_21114.01' => 'BMVG_ACE.txt|CO +NFIRMED|13304|21114.01|20060602|20060530|2261957|US2471311058|DELGI G +ROUP|DELGI GROUP|US/ USD|US/ USD|DFG UN Eq|STK_DIV|Stock dividend + / Bonus|28616000.000000|42924000.000000|||1.000000|1.000000|[3] / [2 +]||S 1 : 2|||||40301020|40301020|Life & Health |Life & Health |',<r +eadmore> '13071_27356.01' => 'BMVG_ACE.txt|EX +PECTED|13071|27356.01|20060607|20060515|2407632|US4433201062|HUB GROU +P A|HUB GROUP A|US/ USD|US/ USD|HUBG UQ Eq|STK_DIV|Stock dividend +/ Bonus|19948000.000000|39896000.000000|||0.900000|0.900000|[2] / [1] +||S 1 : 1|||||20301010|20301010|Air Freight & Logistics|Air Freight + & Logistics|', '13341_27276.01' => 'BMVG_ACE.txt|EX +PECTED|13341|27276.01|20060614|20060601|2985514|US9838571035|X-RITE|X +-RITE|US/ USD|US/ USD|XRIT UQ Eq|ACQ|Tender offer: share (or cas a +nd share)|21241000.000000|28583426.000000|||0.900000|0.950000|||||||| +45203010|45203010|Electronic Equipment Manufacturers|Electronic Equip +ment Manufacturers|', '10291_24687.01' => 'BMVG_ACE.txt|CO +NFIRMED|10291|24687.01|20060602|20060601|2227584|US4534141043|INDEPEN +DENCE CMNTY ||US/ USD|/|ICBC UQ Eq|ACQ|Agreement: cas|82332000.000 +000||||0.900000|||||||||40102010||Thrifts & Mortgage Finance||', }, 'EM_ACE.txt' => { '13331_34127.01' => 'EM_ACE.txt|CONFIR +MED|13331|34127.01|20060615|20060601|B154564||| OF CHINA H|/|CN/ HKD| +3988 HK Eq|IPO|IPO||243510368009.000000||0.080000||0.080000|||||1| +|||40101010||Diversified s|', '12888_15186.01' => 'EM_ACE.txt|CONFIR +MED|12888|15186.01|20060607|20060601|6477169|JO3100411011|JORDAN ELEC +TRIC POWER|JORDAN ELECTRIC POWER|JO/ JOD|JO/ JOD|JOEP JR Eq|STK_DI +V|Stock dividend / Bonus|50000000.000000|60000000.000000|0.750000|0.7 +50000|0.750000|0.750000|[1.2] / [1]||S 0.2 : 1|1|1|||55101010|55101 +010|Electric Utilities|Electric Utilities|', }, 'RMS_ACE.txt' => { '13337_25418.01' => 'RMS_ACE.txt|CONF +IRMED|13337|25418.01|20060602|20060601||US9396531017|WASHINGTON REAL +ESTATE|WASHINGTON REAL ESTATE|US/ USD|US/ USD|WRE UN Eq|PUB_OFF|P +ublic offer to institutions|42139000.000000|44853159.000000|||1.00000 +0|1.000000|||Publpl 2600000 @ USD 34.4 ( + UPDATED )|1|1|||40402010|4 +0402010|Diversified REIT\'s|Diversified REIT\'s|' }, 'DMVG_ACE.txt' => { '13219_10955.03' => 'DMVG_ACE.txt|EX +PECTED|13219|10955.03|20060609|20060524||||ELECTROLUX (DETACHED)|/|SE +/ SEK||SPIN|Spun off NOT traded on the ex date||299418000.000000||0.9 +00000|||||||1||1||25201040||Household Appliances|', '12895_27013.01' => 'DMVG_ACE.txt|EX +PECTED|12895|27013.01|20061218|20060504|2695620|KYG372601099|GARMIN|G +ARMIN|US/ USD|US/ USD|GRMN UQ Eq|STK_DIV|Stock dividend / Bonus|10 +8120000.000000|215874000.000000|0.550000|0.550000|||[2] / [1]||S 1 +: 1|1|1|0|0|25201010|25201010|Consumer Electronics|Consumer Electroni +cs|', '13317_12706.01' => 'DMVG_ACE.txt|EX +PECTED|13317|12706.01|20060615|20060531|0807041|GB0008070418|INVENSYS +|INVENSYS|GB/ GBP|GB/ GBP|ISYS LN Eq|RTS|Right of new underlying s +hare|5687363013.000000|7962308218.000000|1.000000|1.000000|||If 0.15 +> P(t-1) then 1 else [P(t-1)] / [(P(t-1) * 5 + 0.3) / 7]||R 2 : 5 @ +GBP 0.15|1|1|0|0|20106020|20106020|Industrial Machinery|Industrial Ma +chinery|', '13338_18538.01' => 'DMVG_ACE.txt|CO +NFIRMED|13338|18538.01|20060606|20060601|4031976|DE0005003404|ADIDAS- +SALOMON|ADIDAS-SALOMON|DE/ EUR|DE/ EUR|ADS GY Eq|SPLIT|Split|5076 +1755.000000|203047020.000000|1.000000|1.000000|||[4] / [1]||Split 4 : + 1|1|1|1|1|25203010|25203010|Apparel; Accessories & Luxury Goods|Appa +rel; Accessories & Luxury Goods|', }, 'EMVG_ACE.txt' => { '13331_34127.01' => 'EMVG_ACE.txt|CO +NFIRMED|13331|34127.01|20060615|20060601|B154564||| OF CHINA H|/|CN/ +HKD|3988 HK Eq|IPO|IPO||243510368009.000000||0.080000||0.080000||| +||1||||40101010||Diversified s|', '12888_15186.01' => 'EMVG_ACE.txt|CO +NFIRMED|12888|15186.01|20060607|20060601|6477169|JO3100411011|JORDAN +ELECTRIC POWER|JORDAN ELECTRIC POWER|JO/ JOD|JO/ JOD|JOEP JR Eq|ST +K_DIV|Stock dividend / Bonus|50000000.000000|60000000.000000|0.750000 +|0.750000|0.750000|0.750000|[1.2] / [1]||S 0.2 : 1|1|1|||55101010|5 +5101010|Electric Utilities|Electric Utilities|', }, 'APVG_ACE.txt' => { '13331_34127.01' => 'APVG_ACE.txt|CO +NFIRMED|13331|34127.01|20060615|20060601|B154564||| OF CHINA H|/|CN/ +HKD|3988 HK Eq|IPO|IPO||243510368009.000000||0.080000|||||||1||||4 +0101010||Diversified s|', '13330_24527.01' => 'APVG_ACE.txt|EX +PECTED|13330|24527.01|20060616|20060601|6501314|JP3258200009|KIRIN BE +VERAGE CORP||JP/ JPY|/|2595 JT Eq|ACQ|Tender offer: cas only|55002 +370.000000||0.400000|||||||0|0|||30201030||Soft Drinks||', '13330_11642.01' => 'APVG_ACE.txt|EX +PECTED|13330|11642.01|20060616|20060601|6493745|JP3258000003|KIRIN BR +EWERY CO|KIRIN BREWERY CO|JP/ JPY|JP/ JPY|2503 JT Eq|ACQ|Tender of +fer: cas only|984508000.000000|984508000.000000|0.800000|0.800000|||| +||1|1|||30201010|30201010|Brewers|Brewers|' }, 'DM_ACE.txt' => { '13219_10955.03' => 'DM_ACE.txt|EXPECT +ED|13219|10955.03|20060609|20060524||||ELECTROLUX (DETACHED)|/|SE/ SE +K||SPIN|Spun off NOT traded on the ex date||299418000.000000||0.90000 +0|||||||1||1||25201040||Household Appliances|', '12895_27013.01' => 'DM_ACE.txt|EXPECT +ED|12895|27013.01|20061218|20060504|2695620|KYG372601099|GARMIN|GARMI +N|US/ USD|US/ USD|GRMN UQ Eq|STK_DIV|Stock dividend / Bonus|108120 +000.000000|215874000.000000|0.550000|0.550000|||[2] / [1]||S 1 : 1| +1|1|0|0|25201010|25201010|Consumer Electronics|Consumer Electronics|' +, }, 'PMVG_ACE.txt' => { '12280_16814.01' => 'PMVG_ACE.txt|EX +PECTED|12280|16814.01|20060612|20060329|2345022|US31410H1014|FEDERATE +D DEPT STORES|FEDERATED DEPT STORES|US/ USD|US/ USD|FD UN Eq|STK +_DIV|Stock dividend / Bonus|272216000.000000|543734000.000000|||1.000 +000|1.000000|[2] / [1]||S 1 : 1|||||25503010|25503010|Department St +ores|Department Stores|', '12895_27013.01' => 'PMVG_ACE.txt|EX +PECTED|12895|27013.01|20061218|20060504|2695620|KYG372601099|GARMIN|G +ARMIN|US/ USD|US/ USD|GRMN UQ Eq|STK_DIV|Stock dividend / Bonus|10 +8120000.000000|215874000.000000|||0.550000|0.550000|[2] / [1]||S 1 +: 1|||||25201010|25201010|Consumer Electronics|Consumer Electronics|' +, }, 'SCVG_ACE.txt' => { '13304_21114.01' => 'SCVG_ACE.txt|CO +NFIRMED|13304|21114.01|20060602|20060530|2261957|US2471311058|DELGI G +ROUP|DELGI GROUP|US/ USD|US/ USD|DFG UN Eq|STK_DIV|Stock dividend + / Bonus|28616000.000000|42924000.000000|||1.000000|1.000000|[3] / [2 +]||S 1 : 2|||||40301020|40301020|Life & Health |Life & Health |', '13027_27037.01' => 'SCVG_ACE.txt|CO +NFIRMED|13027|27037.01|20060602|20060530|2432214|US4357583057|HOLLY C +ORP|HOLLY CORP|US/ USD|US/ USD|HOC UN Eq|STK_DIV|Stock dividend / + Bonus|29008000.000000|58016000.000000|||0.700000|0.700000|[2] / [1]| +|S 1 : 1|||||10102030|10102030| Refining & Marketing| Refining & Ma +rketing|', }, 'SC_ACE.txt' => { '13304_21114.01' => 'SC_ACE.txt|CONFIR +MED|13304|21114.01|20060602|20060530|2261957|US2471311058|DELGI GROUP +|DELGI GROUP|US/ USD|US/ USD|DFG UN Eq|STK_DIV|Stock dividend / B +onus|28616000.000000|42924000.000000|1.000000|1.000000|||[3] / [2]||S + 1 : 2|||||40301020|40301020|Life & Health |Life & Health |', '13320_31110.01' => 'SC_ACE.txt|CONFIR +MED|13320|31110.01|20060605|20060531|2745837|US0400491082|ARENA RESOU +RCES|ARENA RESOURCES|US/ USD|US/ USD|ARD UA Eq|PRIV_PL|Private pl +acement to strategic|13227000.000000|14511655.000000|0.850000|0.80000 +0|||||Privpl 1150000 @ USD 28.04 ( + UPDATE )|||||10102020|10102020| + & Production| & Production|', '13341_27276.01' => 'SC_ACE.txt|EXPECT +ED|13341|27276.01|20060614|20060601|2985514|US9838571035|X-RITE|X-RIT +E|US/ USD|US/ USD|XRIT UQ Eq|ACQ|Tender offer: share (or cas and s +hare)|21241000.000000|28583426.000000|0.900000|0.950000||||||||||4520 +3010|45203010|Electronic Equipment Manufacturers|Electronic Equipment + Manufacturers|', '13036_23817.01' => 'SC_ACE.txt|EXPECT +ED|13036|23817.01|20060614|20060531|5768585|GRS338163009|HYATT REGENC +Y HOTEL||GR/ EUR|/|HYATT GA Eq|ACQ|Tender offer: cas only|84000000. +000000||0.500000|||||||||||25301020||Hotels; Resorts & Cruise Lines|| +' } );
Here is the sample code I'm trying to wrestle with, to get the output given above:
foreach $file ( sort keys %csv_data ) { #file SCVG_ACE.txt foreach $item ( %{$csv_data{$file} }) { #item 13304_21114.01 if (exists($csv_data{$file}{$item})){ #if the item is found ag +ain add the filename to the #first element of the value $csv_data{$file}{$item} = s/^([^\|]*)\|/$1\/$file\|$csv_d +ata{$file}{$item}/; } else { # maintain the normal data } } }
Please suggest some workarounds for the problem.
Thanks very much in advance

Edited by planetscape - added readmore tags

( keep:0 edit:7 reap:0 )


In reply to Looping thru the complex hash and updating the first element of the value by chanakya

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.