This matter has already been resolved.  Thank you for following up.

: TeamSolCO wrote:
:
: > To start, let me say this:
: > 1) I have both "Learning Perl 3rd Ed" and "Programming Perl 3rd Ed"
: > 2) I have read "Learning Perl 3rd Ed", and I use "Programming Perl 3rd Ed" as 
reference.
: > 3) I have searched with Google for several key words related to my problem, but 
the mass of junk I get back is not
: > helpful.
: > 4) The application source is roughly 450 lines long, and the FAQ for this list 
asks users not to mass-post such
things,
: > otherwise I'd post it here en-masse for help.
: >
: > And, most importantly:
: > A)  I didn't write the application I'm working on, I extended it (to a great deal) 
using the same programming style
as
: > the original author (and other programmers before me), except that I've been 
"cleaning up" the old code a great
deal.
: > B)  I understand this application is quite old, probably written in Perl 4 days, 
and shows no OO influence (was
: > originally written as a down-and-dirty utility script).
: >
: > That said, please do not assume that I am incompetent; I'm just frustrated.  I've 
been programming for more than 20
: > years, just not with Perl (no, I'm not a VB "programmer" -- my experience is 
primarilly C).
: >
: > Now then, I've opened a can of worms by adding "use strict" and "use warnings" to 
the source.  Keep in mind that
this
: > application was running JUST FINE before doing this.  I'm only trying to 
'modernize' this old code.  Having started
with
: > a couple screen-fulls of resulting errors, I'm down to just one:  "Can't use an 
undefined value as a symbol
: > reference..."  The partucular block that causes this error is:
: >
: > sub close_fifo {
: >  close($hndFIFO);
:
: Why is an old C programmer doing this?  It is very clear that the function above 
makes use of some variable $hndFIFO.
Where
: does this variable come from?  How is it scoped and where is it initialized?  You 
know that these things should not be
left
: a mystery.  Although Perl does not require formal function signatures, good structre 
still calls for explicit passing
of
: arguments, and explicit declarations of identifiers being used.
:
: The interpreter is asking where this value gets its definition.  You should give it 
an answer.
:
: > }
: >
: > It's related open sub is:
: >
: > sub open_fifo {
: >  close_fifo();
:
: Don't count on this filehandle being global.  Most likely, in the course of cleaning 
up other portions of the code,
you
: inadvertently declared the filehandle within some lexical scope.  Don't try to 
reverse that action, as it represent
: progress.  Instead, trace the filehandle toits opening make sure it is declared 
within an appropraite scope, and then
: explicitly store, and pass it so that it is available, properly defined, when needed.
:
: >  # Make sure the $hndFIFO file is a pipe.
: >  unless (-p $path_fifo) {
: >   unlink($path_fifo);
: >   system("mkfifo $path_fifo") or die("Can't mkfifo $path_fifo: $!");
: >   chmod(0600, $path_fifo);
: >  }
: >
: >  # Open the $hndFIFO stream.
: >  open($hndFIFO, "< $path_fifo") or die("Can't open $path_fifo: $!");
: > }
: >
: > and, at the top of this source, I have declared $hndFIFO (along with the log file 
handle) using our as in:
: >
: > our ($hndLOG, $hndFIFO);
:
: Hard to say without looking at the source as a whole.  Why not just call it 
serindipity that this global declaration
failed,
: and try again using careful and well-though-out lexical scoping.  If you have been 
programming that long, you should
know
: that globals are poison seeds in code of any complexity.
:
: >
: >
: > Before applying the aforementioned pragmas, the FIFO handle was simply, FIFO.  
There was no "our" declaration, at
all,
: > and the variable/handle name was not prefixed with the scalar $ indicator.  
Everything worked at that time...
Clearly,
: > I'm trying to delcare the FIFO (and log file) file handles as global to the 
application so that I can access them
freely
: > in several other subs.  What do I need to do to satisfy the strict pragma, while 
accomplishing my goal?
: >
: > Thanks!!
: >
: > - William Kimball
: >   "Programming is an art-form that fights back!"
:
: Well, william, you are on the right track.  Do not regret integrated error-detection 
in your code.  Work with the
messages
: it gives.  It was obvious to me, without seeing any error messages, that there was 
something funky about an identifier
: popping up out of thin air to be used in a function.
:
: For what its worth, Perl is more tolerant on this issue than I am.  You may well be 
able to address this issue by
specifying
: your intent to use the more-broadly-scoped value.  Perl allows the redeclaration of 
our variables within a scope, and
takes
: this as a signal to use the variable declared in the outer scope:
:
: sub close_fifo {
:   our$hndFIFO;
:   close($hndFIFO);
: }
:
: Whether that will be enough, I don't know.  The error message reffered to a lack of 
definition, not to improper
declaration,
: so you will have to trace through all code that addresses this global to see that it 
is getting properly assigned, and
that
: no loose cannons are blowing it away before it gets used.  That goes with the 
territory when using globals.
:
: Joseph
:
:
: -- 
: To unsubscribe, e-mail: [EMAIL PROTECTED]
: For additional commands, e-mail: [EMAIL PROTECTED]
: <http://learn.perl.org/> <http://learn.perl.org/first-response>
:
:
:



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to