http://www.perlmonks.org?node_id=1016804


in reply to Re^2: help with error 'readline() on unopened filehandle'
in thread help with error 'readline() on unopened filehandle'

Hi bhargavkanakiya,
from your code:

foreach my $filename( @files ){ my $file = "text_000".$variable."."."lab"; my $outfile = "$outdirname/"."$file"; open my $output , ">$outfile" || die "Can't open the output file!" +; print "file: $file\n"; while ( my $line = <$filename> ) { $line =~ s/^\s+//; $line =~ s/ +/ /g; $line =~ s/\s+$/\n/g; print $output $line; } close ($output); $variable++; }
$filename is the name of the file to open, and read from. In your code, "$filename" is not a FILEHANDLE.
In Perl Programming, you need a file-handle in the open function like thus:  open FILEHANDLE,MODE,EXPR
Note: that you are not opening, your file named "$filename" to read from. You are just using it in the while loop with readline function as while ( my $line = <$filename> ) {...} which should really be while ( my $line = <FILEHANDLE> ) {...} So, your code should be something like:
foreach my $filename( @files ){ my $file = "text_000".$variable."."."lab"; my $outfile = "$outdirname/"."$file"; open my $output,'>',$outfile or die "Can't open the output file: $ +!"; ## updated open my $fh,'<',$filename or die "can't open file: $!"; ## add +ed print "file: $file\n"; while ( my $line = <$fh> ) { $line =~ s/^\s+//; $line =~ s/ +/ /g; $line =~ s/\s+$/\n/g; print $output $line; } close $fh or die "can't close file: $!"; ## added close $output or die "can't close file: $!"; ## updated $variable++; }
NOTE: All codes are not tested please.

If you tell me, I'll forget.
If you show me, I'll remember.
if you involve me, I'll understand.
--- Author unknown to me