Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

Re: using 'my'

by Anonymous Monk
on Jun 21, 2001 at 20:16 UTC ( #90435=note: print w/replies, xml ) Need Help??

in reply to using 'my'

You don't have to 'use strict' but it certainly helps you catch those hard to see errors.

I often use strict and declare my variables global.

#!/usr/bin/perl -w

use strict;

Kind of lazy, but I can use the variables everywhere in the script and I still catch the errors. Heffa K

Replies are listed 'Best First'.
Re: Re: using 'my'
by Hero Zzyzzx (Curate) on Jun 21, 2001 at 20:35 UTC

    I'm sorry, but those aren't global variables, they are just lexically scoped variables at the "highest level" of a script.

    Declaring variables like this is bad practice, in my mind if you're doing CGI programming, or any other perl programming that creates persistent compiled copies of perl scripts.

    This type variable sharing will give the famous "variable will not stay shared" error with mod_perl.

    If you're never going to use mod_perl, then you can keep on coding this way. A better way would be to pass all variables to your subroutines as arguments, thusly:

    first_sub('Testing, testing',' one, two, three'); sub first_sub { my ($var,$var2)=@_; second_sub($var,$var2); } sub second_sub { my ($variable,$variable2)=@_; print $variable.$variable2; }

    This more rigid, but it really helps you keep your variables in line, making for easier maintaince down the road. You can reuse the subroutine elsewhere, 'cuz you know exactly what goes in and what comes out.

    You could declare the variables as globals with the closed perl equivalent, thusly:

    use strict; use vars qw/$var1 $var2/;

    but this is bad programming practice generally, as I understand it. (why is this? Is it due strictly to memory usage?)

    Update: Of course. I must have had a brain cramp. See TGI's post below.

      Hero Zzyzzx said: You could declare the variables as globals...but this is bad programming practice generally, as I understand it. (why is this? Is it due strictly to memory usage?)

      You answered your own question as to why globals are bad, when you said You can reuse the [code] elsewhere, 'cuz you know exactly what goes in and what comes out. It has to do with modularity of code. It's a lot easier to make everything global and share data around indiscriminantly, but maintaining such code can be hellish.

      Perl, more than any other language I've used, gives you the flexibility to 'get stupid.' That's what makes Perl so great, sometimes you just need to get something done, and its easier and faster to do it if you do it 'the wrong way'.

      TGI says moo

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://90435]
[Corion]: My Perl output hasn't recovered, but as $work is still somewhat stressful, I don't think this would be different with a five day workdweek
[Lady_Aleena]: Corion, that is a good thing (TM) 8)
[Corion]: And this evening, I'm actually dusting off some old module of mine and bringing it up to the last version of the library I'm wrapping
[Lady_Aleena]: Updating things can be fun, if there is a better way to do it.
[Corion]: Lady_Aleena: Mostly, it's just housekeeping, but it inspires me about things I could do with it, so that's good ;)
[Lady_Aleena]: By the way, I stopped by to let someone know I'm still alive, though I haven't found anything to write in perl for a while now.
[Lady_Aleena]: I need inspiration.

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2017-09-24 18:15 GMT
Find Nodes?
    Voting Booth?
    During the recent solar eclipse, I:

    Results (274 votes). Check out past polls.