Janek, et al --

...and then Janek Schleicher said...
% 
% David T-G wrote at Wed, 12 Jun 2002 15:39:41 +0200:
% 
% > I'm trying to be good and so I use "my $variable" rather than making them global, 
and I prefer to
...
% 
% Wait a moment.
% It seems like that:
%   - You want to write Perl scripts.

Yep.


%   - You've heard that it is better to use use strict; use warnings;

Yep; believe it, too.


%   - Now Perl's complaining about many no declared variables.
%   - You declare them all at the beginning.

In this limited context, yes.  I wouldn't usually declare them all up
front.


%   - Now Perl gives warnings because there are some undefined variables.
%   - Now you want to assign all variables values like "", 0, () or so for the 
beginning.

Well, not necessarily.  I didn't really need

  my ($a, @b, %c) = "" ;

[ignoring for the moment that that doesn't work] but that instead grew
out of my original requirements.  If you look at

  my ($artist, $album, $track) ;
  while (<>)
  {
    ($artist, $album, $track) = split(/\//);
    if ( $track eq "foo" )
    ...
  }

then you see that when a short path is read in (perhaps just album and
track, thereby shifting things over a space) the script throws an error
because $track is undef and shouldn't be used for comparison.  *That* is
where you get the "not just define but set, too" mentality of the script.

I'll be pruning that back a bit when I next sit down to work on it,
I assure you :-)


% 
% I think, that it is my obligation to warn you 
% that use strict; use warnings; wasn't made for that way.

Now, them's fightin' word, pardner!  Into the street!


% 
% It remembers me to a mafia killer
% who has to swear to his mother to have a more christian life style.
% So now, he always does a prayer before he kills anybody.
% A more christian life style.

*grin*


% (Please don't take it too serious :-)))

Oh, I'm not.  Don't worry :-)


% 
% use strict; use warnings; wasn't made only to make the Perl Community luckier.
% It can help to avoid typical mistakes like
%   (a) mispelling of a variable
%   (b) using of an undefined variable (what in the most cases isn't wanted)

Right; that, in fact, is what I have going on above.


%   (c) side effects without lexical assignments 
%       (e.g. to say in a subroutine $i = 5; 
%        should'nt influence the $i variable from the main program)

Agreed.


%   - ...
%   - ...
% 
% If the variables are declared at the beginning, 
% assigned with the standard values for undefined values.
% you only can check (a).

Hmmm...  Well, I'll grant you that, but what about the example above?  It
would only be undef for the first N lines that are short, and once it
gets loaded then it will get reset instead.  It seems more sensible to
set it to a defined but appropriate value for the upcoming loop than to
integrate single-case undef logic into the loop, no?


% 
% It's a very powerful concept to use variables only where they are needed.
% It avoids many side effects.
% If there are really some global variables needed,
% declare them with the keyword 'our'.

I still don't quite get the whole "our"/"local" think yet.  Still workin'
on that.


% 
% (Another way to remove the ugly warnings from Perl 
%  can be done with the CPAN pragma
%  use loose;   :-)
% )

I'll check that out; thanks.  The idea, of course, is to write code that
doesn't have warnings under any conditions :-)


% 
% If there are many scalar values you need globally and
% they belongs to a group,
% like in the case of MP3-Data,
% there's a good chance that a global hash can solve the problem.

At the moment I'm storing then in a hash as

    $threez{$fullpath} =
      [($mp3,$source,$host,$artist,$disk,$track)] ;

and will move that to a DB routine that will write to a hash, a flat
file, a database, or whatnot -- and then I can pass it the parameters
(where it will scope them locally) from this "read in some more data"
subroutine, which will also scope them locally.

Given all of that (*whew*), does it sound like I'm on the right track
or instead still Not Getting It Even If TMTOWTDI?


% 
% Cheerio, 
% Janek


Thanks a *bunch* & HAND

:-D
-- 
David T-G                      * It's easier to fight for one's principles
(play) [EMAIL PROTECTED] * than to live up to them. -- fortune cookie
(work) [EMAIL PROTECTED]
http://www.justpickone.org/davidtg/    Shpx gur Pbzzhavpngvbaf Qrprapl Npg!

Attachment: msg25980/pgp00000.pgp
Description: PGP signature

Reply via email to