in reply to unable to open input file

I always find repeated "print OUT" a bit clunky. Two alternatives:
$outputFile = "fulltoc.htm"; open(OUT, ">",$outputFile) or die "couldn't open outputfile: $!"; select OUT; print ("<HTML><HEAD><TITLE>"); print ("Detailed Table of Contents\n"); print ("</TITLE></HEAD><BODY>\n");

Or:

$outputFile = "fulltoc.htm"; open(OUT, ">",$outputFile) or die "couldn't open outputfile: $!"; print OUT "<HTML><HEAD><TITLE>" . "Detailed Table of Contents\n" . "</TITLE></HEAD><BODY>\n";

Note that with the first approach, you'd have to explicitly print to STDOUT when you want to print to the screen:

print STDOUT "$file\n";

I was also surprised by this line:

next if $file =~ m/^\.htm$/i; next unless $file =~ m/\.htm$/i; # not this?

Replies are listed 'Best First'.
Re^2: unable to open input file
by Perlbotics (Archbishop) on Jan 12, 2009 at 22:34 UTC

    Right ... and a third one. There is a bit of debate whether heredocs (see quotelike operators: <<EOF)] are evil for this purpose, but it might be an option here for short scripts. However, if the project grows bigger, separation of content and format will become necessary ... (e.g. by using templates).

    open(OUT, ">",$outputFile) or die "couldn't open outputfile: $!"; print OUT <<'END_HEADER'; # '...' no interpolation <HTML> <HEAD> <TITLE>Detailed Table of Contents</TITLE> </HEAD> END_HEADER print OUT <<"END_BODY"; # "..." with interpolation <BODY> <H1>File: $outputFile</H1> </BODY> </HTML> END_BODY