Welcome to the Monastery, elfstones65. In the future, please provide a Short, Self-Contained, Correct Example so that we can download and run the code and more easily see the issue that you are having.

Anyway, I assume that when reading your input, you first encounter a line that matches your first regex /File .../, and sets $files{"$processingFile"} = 1;, so e.g. $files{"ENV.FILESOURCE.SOURCE.J2018058.N000001"} = 1;. Then, when your code encounters a line matching /Finished/ for the same file, you attempt to use $files{"ENV.FILESOURCE.SOURCE.J2018058.N000001"} as a hash reference by saying things like $files{"$currentFile"}{'read'}. However, $files{"ENV.FILESOURCE.SOURCE.J2018058.N000001"} contains the value 1 instead of a hash reference.

Now Perl does something interesting: because you're not using strict 'refs', it will actually access a hash named %1 - and it will do this for all files that have the same value in the %files hash! So every file's /Finished/ data is ending up in the same hash, overwriting each other. You can see this yourself if you say use Data::Dumper; print Dumper(\%1); - you will see the data from the most recent Finished line collected in that hash. See Symbolic references.

The best solution here is to Use strict and warnings! This will force you to avoid symbolic references, which is a good practice because it avoids the confusing behavior you're seeing. See also Why it's stupid to `use a variable as a variable name'.

Update: Several edits to improve the explanation.


In reply to Re: Perl hash keys not considered unique (updated) by haukex
in thread Perl hash keys not considered unique by elfstones65

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.