Perl syntax

Andrew Hammond ahammond-swQf4SbcV9C7WVzo/KQ3Mw at public.gmane.org
Mon May 30 15:47:33 UTC 2005


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Anthony's post is mostly right. Declaration and scope of variables isn't
a trivial topic in perl, but I'll take a swing at a simplified version.

use strict; requires that variables be declared _before_ they're used.

There are 3 ways to declare a variable:

1) my declares (and creates) a "private" variable. This is a lexically
scoped variable. It goes away when you leave the scope in which it was
declared.

2) our declares a "global" variable. It's doesn't go away until your
program ends.

3) local declares a dynamic scope of a variable. This should sound
complicated because it is. It's used to "localize" variables.

If you want to really understand this you need to get a copy of the
camel book and read chapter 4, to start with.

- --
Andrew Hammond    416-673-4138    ahammond-swQf4SbcV9C7WVzo/KQ3Mw at public.gmane.org
Database Administrator, Afilias Canada Corp.
CB83 2838 4B67 D40F D086 3568 81FC E7E5 27AF 4A9A


Anthony wrote:
> Missed a line.
> 
> To declare a variable to only be valid from
> declaration to the end of the block use.
> 
> local $var="data;
> 
> Anthony
> --- Anthony <agamemnon67-bJEeYj9oJeDQT0dZR+AlfA at public.gmane.org> wrote:
> 
>>It is very important that you understand exactly
>>what
>>it is you are doing to fix the errors. Someone said
>>just put 
>>
>>my $var="data"; 
>>
>> True it does stop the error messages but unless you
>>understand the correct scoping in the variables,
>>your
>>program will have a lot worse logic problems down
>>the
>>road.
>>
>>You have to ensure your variables are scoped
>>properly.
>>For example, when you:
>>use strict;
>>
>>You must ensure to declare whether your variables
>>are
>>dynmaically or lexically scoped.
>>Therefore you cannot declare a variable like this:
>>
>>$var="data";
>>
>>You have to tell the Perl interpreter in which
>>blocks
>>the variables are valid.
>>
>>my $var="data";
>>
>>in the main prgram will ensure that $var is always
>>valid in the program. If it is placed inside its'
>>own
>>block, $var will be valid inside that block, for
>>instance a subroutine. This allows you to reuse
>>variables. so $var can be different inside different
>>blocks.
>>
>>Additional you can set a variable to only be valid
>>from the declaration until the end of the block.
>>
>>Hope that helps.
>>
>>Anthony
>>--- John Wildberger <wildberger-iRg7kjdsKiH3fQ9qLvQP4Q at public.gmane.org> wrote:
>>
>>>In the recent thread on this subject the 'use
>>>strict' pragma was very strongly 
>>>suggessted.
>>>Here is a very simple program urc2_1.pl:
>>>
>>>#! /usr/bin/perl -w
>>>use strict;
>>>while (<>){
>>>    $count{$ARGV}++;
>>>}
>>>foreach $file (sort keys %count){   
>>>    print "$file has $count{$file}  lines\n";
>>>}   
>>>
>>>When executed it gives the following error
>>
>>messages:
>>
>>>[john]: 09:46 AM  [~/perl]
>>>$ ./urc2_1.pl urc2_1.pl
>>>Global symbol "%count" requires explicit package
>>>name at ./urc2_1.pl line 4.
>>>Global symbol "$file" requires explicit package
>>
>>name
>>
>>>at ./urc2_1.pl line 6.
>>>Global symbol "%count" requires explicit package
>>>name at ./urc2_1.pl line 6.
>>>Global symbol "$file" requires explicit package
>>
>>name
>>
>>>at ./urc2_1.pl line 7.
>>>Global symbol "%count" requires explicit package
>>>name at ./urc2_1.pl line 7.
>>>Global symbol "$file" requires explicit package
>>
>>name
>>
>>>at ./urc2_1.pl line 7.
>>>Execution of ./urc2_1.pl aborted due to
>>
>>compilation
>>
>>>errors.
>>>
>>>Without the 'use strict' pragma it executes
>>
>>without
>>
>>>errors like this:
>>>
>>>[john]: 09:44 AM  [~/perl]
>>>$ ./urc2_1.pl urc2_1.pl
>>>urc2_1.pl has 9  lines
>>>
>>>What changes to the program will I have to make to
>>>correct this?
>>>John
>>>--
>>>The Toronto Linux Users Group.      Meetings:
>>>http://tlug.ss.org
>>>TLUG requests: Linux topics, No HTML, wrap text
>>>below 80 columns
>>>How to UNSUBSCRIBE:
>>>http://tlug.ss.org/subscribe.shtml
>>>
>>
>>--
>>The Toronto Linux Users Group.      Meetings:
>>http://tlug.ss.org
>>TLUG requests: Linux topics, No HTML, wrap text
>>below 80 columns
>>How to UNSUBSCRIBE:
>>http://tlug.ss.org/subscribe.shtml
>>
> 
> --
> The Toronto Linux Users Group.      Meetings: http://tlug.ss.org
> TLUG requests: Linux topics, No HTML, wrap text below 80 columns
> How to UNSUBSCRIBE: http://tlug.ss.org/subscribe.shtml
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCmzWUgfzn5SevSpoRAurFAKCrXtoYY9ECspcI7qV10qv9aQJlpQCfXJgs
jhEW+5K97uT/HODFlAP69/Q=
=DqXF
-----END PGP SIGNATURE-----
--
The Toronto Linux Users Group.      Meetings: http://tlug.ss.org
TLUG requests: Linux topics, No HTML, wrap text below 80 columns
How to UNSUBSCRIBE: http://tlug.ss.org/subscribe.shtml





More information about the Legacy mailing list