> -----Original Message-----
> From: Johnson, Shaunn [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, May 02, 2002 10:37 AM
> To: '[EMAIL PROTECTED]'
> Subject: passing local value between sub functions
>
>
> Howdy:
>
> Have a question about trying to pass the result
> of a sub function to another sub function.
>
> Let's say I have some code like this:
>
> [snip]
>
> sub firstPart {
> while (<>) {
> print "Stuff here is: $_\n";
> }
>
> [/snip]
>
> I'd like to know how can I make $_ available
> for OTHER sub functions if not the entire program.
> I'm trying to get snips of code so I can show
> you what I'm working with (apologies since it
> isn't my code); I was under the impression that
> I could use my() and pass that info OUTSIDE
> the sub function.
$_ is one of Perl's "special" variables and is always global.
So, if you have:
sub foo
{
$_ = "Hello, world\n";
bar();
}
sub bar
{
print $_;
}
foo(); # call sub foo
Then when foo() is called, sub bar will print "Hello, world\n",
since $_ is a global variable.
Consider this:
sub foo
{
$hello = "Hello, world\n";
bar();
}
sub bar
{
print $hello;
}
foo(); # call sub foo
The same situation holds. $hello is a global variable, because by
default, all variables in Perl are global. Using "my" makes a
local (lexical) variable:
sub foo
{
my $hello = "Hello, world\n"; # $hello now lexical var
bar();
}
sub bar
{
print $hello; # prints nothing, why?
}
foo(); # call sub foo
The addition of "my" turns $hello into a "private" or lexcial
variable. It now is limited to a "scope" consisting of the point
at which it is defined until the end of the innermost enclosing
block { } or file. In this case, $hello can only be accessed by
lines of code that lie between the "my" line and the closing brace
(}) two lines later. When we try to print $hello in sub bar,
nothing prints, because we are actually using the "global" $hello.
When we are outside of the scope of the "private" $hello, we
default to using the global $hello.
This is usually a problem that should be brought to our attention,
so perl has a "use strict" pragma that will raise an error if we
try to access a global variable (such as $hello inside sub bar)
without previously delaring our intention to do so. ($_ and the
other "special" globals are exempted from this, however.)
There's *lots* more to be said about this in:
perldoc perlsub
perldoc perlvar (about the "special" variables)
perldoc strict
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]