Does the use strict; impact the "my $x;" declaration any differently?
What does "our $x;" do?
in any case, usig the same variable name such as $x in the main and other
sub would occur as a temporary place holder. However, I was curious on how
to access the outer var in the sub whcih you desc with $main::x
Ok - I'm trying to figure out what this means as declared in the main:
> 'my $x="abc";' creates a local variable visible in the whole script.
> ' $x="abc";' creates a global visible inside and outside the script.
I've tested the my $x; inside the sub and it behaves as I expected. But in
the main, I'm still not 100% sure what is the diff?
Does global means like static variable in C?
-rkl
> [EMAIL PROTECTED] wrote:
>
>> How do you declare a var global versus local? It seems variables a local
>> and not static as in shell. That is, the sub does not see the vars from
>> the calling part. So, can someone modify the snipet to make it work?
>>
>> a.pl
>> ------
>> #my $x; any diff from the next line?
>> $x="abc";
>
> yes.
>
> 'my $x="abc";' creates a local variable visible in the whole script.
> ' $x="abc";' creates a global visible inside and outside the script.
>
>>
>> doMe
>>
>> sub doMe
>> { $x="xyz";
>
> you just over writes the value of $x with 'xyz'
>
>> print $x; #will print out xyz
>> How can I get the "$x=abc" here w/o passing as an arg?
>
> there is no way to get 'abc' at this point.
>
>> }
>
> you need to undersant how Perl differeniate and handle local and global
> variable:
>
> #!/usr/bin/perl -w
> use strict;
>
> #--
> #-- global $x
> #--
> our $x = 'abc';
>
> sub doMe{
>
> #--
> #-- local $x to doME
> #--
> my $x = 'xyz';
>
> #--
> #-- prints value of $x local to doMe
> #--
> print $x,"\n";
>
> #--
> #-- prints the value of global $x
> #--
> print $main::x,"\n";
> }
>
> doMe;
>
> __END__
>
> prints:
>
> xyz
> abc
>
> but if you declare your $x as a local variable like this:
>
> #!/usr/bin/perl -w
> use strict;
>
> my $x = 'abc';
>
> sub doMe{
> my $x = 'xyz';
> print $x,"\n";
> }
>
> doMe;
>
> __END__
>
> there is no way for Perl to access the outer local $x from within doMe
> because the inner local $x shadow the outer local $x. why would you want
> to
> name 2 local variables the same name anyway?
>
> all this is explained at:
>
> perldoc -q scope
> perldoc -q "difference between dynamic and lexical"
>
> david
> --
> $_=q,015001450154015401570040016701570162015401440041,,*,=*|=*_,split+local$";
> map{~$_&1&&{$,<<=1,[EMAIL PROTECTED]||3])=>~}}0..s~.~~g-1;*_=*#,
>
> goto=>print+eval
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]