in reply to Re^14: Got by Strict.pm!!!!
in thread Flummoxed by strict.pm

87 open (OUT, ">$filename");

You are not checking for error there. This line should be:

87 open (OUT, ">$filename") or die "Couldn't create '$filename': $!";

For the warning about $backupoutput, that means you have somewhere something like:

my $backupoutput = 1; ... my $backupoutput = 2; # you will get the warning here print $backupoutput;

Usually this happens when you get trigger-happy and add my before everything that looks like a variable, and then add one my too many.

Replies are listed 'Best First'.
Re^16: Got by Strict.pm!!!!
by CaptainRob (Novice) on May 11, 2010 at 01:49 UTC

    Corion, Thanks for the note. I put in the following lines;

    1 #!/usr/bin/perl -w 4 use strict; 5 use Data::Dumper; 6 $|=1; #makes the macro produce all results at once, not in spurts 8 my $filename = "RAH99.html"; 9 my $output = $filename; 10 my $backupoutput = 1; #New from Corion 11 my $backupoutput = 2; # you will get the warning here 12 print $backupoutput; # New from Corion 13 my $backupoutput = $filename; 14 print $backupoutput; 15 my $backupoutput =~ s{\.html*}{.entbackup.html}i; 17 open (IN, $filename); 18 my $book = join('',<IN>); 19 close IN; 21 open (OUT, ">$backupoutput"); 22 print OUT $book; 23 close OUT; 26 $book =~ s/‘/&lsquo;/g; 27 $book =~ s/’/&rsquo;/g;

    Many more lines of character change

    83 $book =~ s/û/&ucirc;/g; 84 $book =~ s/ü/&uuml;/g; 86 my $utf8 = qq!<meta http-equiv="Content-Type" content="text/html; c +harset=UTF-8" />!; 88 $book = "I have changed the most common Unicode characters into HTM +L entities.\n\nUse this search term to find any leftovers: [€-ÿ]\n\nA +lso, don't forget to add a UTF-8 meta tag to your header:\n\n$utf8\n\ +n".$book; 91 open (OUT, ">$filename") or die "Couldn't create '$filename': $!"; + #New from Corion 92 print OUT $book; 93 close OUT;

    And so I got:

    C:\Perl64\bin>perl entities_99.pl "my" variable $backupoutput masks earlier declaration in same scope at + entities_99.pl line 11. "my" variable $backupoutput masks earlier declaration in same scope at + entities_99.pl line 13. "my" variable $backupoutput masks earlier declaration in same scope at + entities_99.pl line 15. 2RAH99.htmlUse of uninitialized value $backupoutput in substitution (s +///) at entities_99.pl line 15. Use of uninitialized value $backupoutput in concatenation (.) or strin +g at entities_99.pl line 21. print() on closed filehandle OUT at entities_99.pl line 22.

    Does this suggest a new approach?

      Whoa, slow down. Corion showed the pattern that leads to the warning so you could eliminate it, not add another instance of it.

      As for adding error checking to open, you missed a few instances of open.

        Ikegami, BrowserUK, Corion and all other monks who contributed---thanks for all your help

        I finally got entities.pl (see the thread for more detail on this) to work. I deleted the html file to be processed, replaced by a SHIFT. So it went like this

        #!/usr/bin/perl use strict; use Data::Dumper; $|=1; #makes the macro produce all results at once, not in spurts my $filename =SHIFT; #Instead of RAH99.html

        And then my command line was this:

        Microsoft Windows [Version 6.1.7600] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\Captain Rob>cd.. C:\Users>cd.. C:\>cd perl64 C:\Perl64>cd bin C:\Perl64\bin>perl entities.pl RAH99.html C:\Perl64\bin>

        The resultant script will process any html script and replace all special characters with html entities in the submitted html file---in this case RAH99.html.

        So, thanks once again to all who contributed their time and thoughts to steering me onto the right path. Greatly appreciated. While this is the end of this thread, like MacArthur--and the Terminator--I'll be back