It would help a lot to know how your input data looks like (a few lines of each file would be enough), and if PIDS or FIDS is the larger one.

I guess your logic problem (or one of them, at least) is this line:

if ($fid =~ /$pidCan/) {

Which interprets $pidCan as a regex, not just as a constant string to search for.

You can make that a literal search by writing if ($fid =~ /\Q$pidCan\E/) instead.

And yes, chances are that your program can be made much faster, but for that it would really help to know the structure of your input data.

There are also some stylistic weaknesses in your code - for example it's bad practice to declare all variables up front - that way they can be seen in the whole program. It's easier to avoid errors though if you keep the scope of each variable small. For example $result can and should be declared inside the loop:

foreach $pid (@pids) { my $result; $pid =~ /\|(.*)$/; $result = $1; push (@pidCans, $result); }

Or even better avoided completely:

foreach $pid (@pids) { $pid =~ /\|(.*)$/; push @pidCans, "$1"; }
Perl 6 - links to (nearly) everything that is Perl 6.

In reply to Re: My code sucks, please help me understand why. by moritz
in thread My code sucks, please help me understand why. by mirage4d

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.