Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^2: What can I do to improve my code - I'm a beginner

by Anonymous Monk
on Aug 11, 2017 at 08:43 UTC ( #1197238=note: print w/replies, xml ) Need Help??


in reply to Re: What can I do to improve my code - I'm a beginner
in thread What can I do to improve my code - I'm a beginner

To the psychiatrist, I go for my conversion therapy then! But seriously thank you for the constructive criticism. As I say I'm still very much a beginner and it is comments like these which are going to make me better. Could you please explain something for me though? Regarding setting the array to undef - I completely understand what you are saying. I was wondering why the array was 1 element longer than what it was supposed to be and now I know. I also have an understanding with what you are saying with the lexical scalar variable $input_file. But I am not sure what I need to do to get around these. As you can see from my code, I need them to be global variables, so I define them outside of the WHILE loops. If you say that you see them as redundant can you tell me how to get around doing this? Once again, thanks!
  • Comment on Re^2: What can I do to improve my code - I'm a beginner

Replies are listed 'Best First'.
Re^3: What can I do to improve my code - I'm a beginner
by AnomalousMonk (Chancellor) on Aug 11, 2017 at 14:53 UTC
    ... I am not sure what I need to do to get around these. ... I need them to be global variables, so I define them outside of the WHILE loops. If you say that you see them as redundant can you tell me how to get around doing this?

    Please understand that what I see as redundant is useless explicit initialization of a variable. In the case of
        my $input_file = undef;
    the assignment does exactly what is done by default; it is purely redundant.

    Semantically erroneous statements like
        my @files = undef;
    are redundant in the present circumstances because the very next thing you do with these arrays (as far as I can see) is to assign them valid data, thus undoing the erroneous initialization. In other circumstances, the erroneous initialization may lead to a nasty bug.

    ... I need them to be global variables, so I define them outside of the WHILE loops.

    Of course, you need to define lexical variables where you need to use them. On this note, you only use the  @dt lexical within the scope of the  if($firstline==1){ ... } statement block, so that's exactly where I would define it:

    if($firstline==1){ ... my @dt = $header[0] =~ /(\d+)/g; ... } else { <IN> for 1..1 }
    (Incidentally, the  <IN> for 1..1 statement is needlessly involved: if you just want to read and discard one line, the simple  <IN>; statement does the trick.)


    Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1197238]
help
Chatterbox?
[1nickt]: marto all good after the hurricane?

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (7)
As of 2017-10-17 10:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My fridge is mostly full of:

















    Results (225 votes). Check out past polls.

    Notices?