in reply to Re: Perl Errors
in thread Perl Errors

Ok so to be clear. When I initialize a variable use my but I don't have to use my every time I call it?

Replies are listed 'Best First'.
Re^3: Perl Errors
by CountZero (Bishop) on Mar 27, 2012 at 20:15 UTC
    Correct! Every time you use my $variable a new $variable is created that will hide the previously declared variable.

    If you declare the second $variable in the same scope, you cannot access the value of the previously declared variable anymore.

    If you declare the second $variable in a different scope, you cannot access the value of the previously declared variable while you are in that scope. Leaving that scope, the earlier variable will suddenly re-appear. As you will understand, this can cause all kinds of weirdness and confusion, so don't do it unless you have a very good reason for it.

    CountZero

    A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

    My blog: Imperial Deltronics
      So don't use strict?
        That's not the lesson!

        use strict; and use warnings; will help you by identifying mistakes such as declaring a variable twice (in the same scope). The cure is to make sure your variables are declared ONLY ONCE unless there is some special and very good reason for doing otherwise; a situation you're not apt to encounter until you're a very sophisticated and knowledgeable coder.

        What? I smell heresy in the Monastery! Cleanse the Xenos, Burn the Witch, Purge the Heretic!

        Always use strict; If you see uncleanliness you can do two things: clean it up or stab out your eyes so you do not see it anymore. Your choice.

        CountZero

        A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

        My blog: Imperial Deltronics
Re^3: Perl Errors
by roboticus (Chancellor) on Mar 27, 2012 at 20:15 UTC

    Hellhound4:

    Yes. You use my to declare a new variable in a scope (file, curly braces). So this:

    my $fruit = 'apple'; { my $fruit = 'banana'; print "$fruit\n"; } print "$fruit\n";

    should print apple and banana, because you have *two* variables named $fruit. While you're within the curly braces, the second one masks (hides) the first one. If you remove the second 'my', then it should print banana and banana, since you're using the same variable.

    Note: I didn't test the code.

    ...roboticus

    When your only tool is a hammer, all problems look like your thumb.