The comma was a pseudo code error. Should have read
=
print $FH "some stuff\n"; # works great.
=

I will test for undef on $thing. Thanks for looking. Pretty sure I printed
the expected result to STDOUT without error. The module call involves a
telnet across the network, maybe the open I added provides enough time for
$thing return some data. I will experiment with sleep(5). I would use
expect for the telnet session, but this has to be run by activeperl on a
windows platform. :/ I'd use the alternative for expect if I had the
choice. Thanks again for looking.




Matt


On Tue, Jan 14, 2014 at 9:37 PM, Rob Dixon <rob.di...@gmx.com> wrote:

> On 15/01/2014 03:09, Matt McAdory wrote:
>
>> Is there a method for determining the currently selected filehandle?
>> should I always check for undef and open my filehandle before writing to
>> it?
>>
>> use strict;
>> use warnings;
>> use autodie qw (:all);
>>
>> use My:CustomMod_with_FH_write;
>>
>> open (my $FH, ">", "filename.txt");
>>
>> my $var = My:CustomMod_with_FH_write->new;
>> my @array = $var->sub1(); #writes to it's FH, but returns me an array of
>> stuff
>> print $FH, "some stuff\n"; # works great.
>> while (@array) {
>>      chomp;
>>      my @array2 = $var->sub2($_);  #gets some new stuff in another array,
>> prints again to the module FH
>>      while (@array2) {
>>          chomp;
>>          my $thing = $var->sub3($_); # returns a scalar
>>          print $FH "$thing\n"; 
>> #################################################
>> BOOM!?!?
>>      }
>> }
>>
>>
>> ========
>>
>> the last print always give me a ". . . . concatenate (.) to undefined
>> variable $FH near line . . . ." and I can't understand where I'm scoping
>> out and my $FH gets closed. Add the open below and it works. Granted
>> this is some dummy code, I'm not in the office right now to give
>> specifics, but sub calls to the module work fine. Write to the my
>> filehandle works fine . . . until I get to a certain level of nesting
>> and then it bombs and I don't understand why nor can I find a way to
>> print the active filehandle. What am I doing wrong? The module FH and my
>> FH are different files in different directories. I probably need to find
>> a different way of doing what I'm doing.
>>
>> Should that BOOM always be:
>>
>> if (undef $FH) {open (my $FH, ">>", "filename.txt");}
>> print $FH "$thing\n";
>> close $FH;
>>
>> A friendly page in the fine manual to read. A nudge towards a llama or
>> camel reference would be appreciated. Several days show my googlefu to
>> be lacking. Where is my rookie mistake?
>>
>
> In this case the currently-selected file handle is irrelevant as all
> your print statements specify the file handle explicitly.
>
> Your problem isn't with a closed file handle, which would report
>
>     print() on closed filehandle
>
> but with the contents of $thing. The statement
>
>     print $FH "$thing\n"
>
> will report
>
>     Use of uninitialized value $thing in concatenation (.) or string
>
> if $thing is undefined.
>
> Rob
>
> ---
> This email is free from viruses and malware because avast! Antivirus
> protection is active.
> http://www.avast.com
>
>

Reply via email to