The perl documentation (perldoc -f my) has this to say about the perl 
builtin "my":

   A my declares the listed variables to be local (lexically) to the
   enclosing block, file, or eval. If more than one value is listed, the 
  list must be placed in parentheses. See Private Variables via my() in
   the perlsub manpage for details.

The section on lexical scoping it refers to is an excellent explanation, 
but I'll try to add the way I think of it just because...

The english meaning of "my" is a rather possesive one.  It means that 
this thing here belongs to ME and almost more importantly, not to you. 
It's not ours (or I would have said it was), and the ownership of this 
thing is not abmiguous. It's mine - and mine only. My accomlishes the 
same thing in perl.

Andy Says 'My Apple'  #declares that is is an apple, and that it belongs 
to this Andy
my Foo;  # pre-declares this as a lexically scoped variable belonging to 
the part of the program that called it.

What my does, is tell perl how much of the program has that particular 
variable.  Consider the following:

$variable = "Apple\n"
foreach (0 .. 9) {
   $variable = "orange\n";
   print $variable;
}
print $variable;

The above code will print out 11 lines of "orange", because when you 
change the value of $variable within the foreach loop, you're changing 
the value.  By default, variables attempt to be global in perl.

now let's play with

my $variable = "Apple\n";
foreach (0 .. 9) {
  my $variable = "orange\n";
  print $variable;
}
print $variable;

The second example there will print our 10 lines of "Orange" followed by 
one of "Apple".  The reason for this is that the variable which is set 
outside the block of code run by the foreach loop is now a completely 
different variable from the one set inside the block of code run by the 
foreach loop.  The use of "my" tells perl that while the main block of 
the program owns a variable called $variable, the foreach loop owns a 
completely different variable, which just co-incidentally also happens 
to be named $variable.

The possesiveness of the word is retained in perl.  My scopes a variable 
to the block of code in which it is declared.

Of course none of this would be complete without mentioning that the 
newly introduced keyword "our" is equally as permissive in perl as it is 
in the english language ;)

Hope that helps.

--A


SunDog wrote:

> Hello everyone,
> 
>     I'm new to PERL ...
>     and have a question about a style/format I've observed
>     where   'my'   is placed in front of arrays, hashes - you name it ...
>     At first I interpreted this as a Nemonic name but several
>     functions might have this in the same code .. what gives ?
> 

Reply via email to