example file Ответов: 1

Почему мой файловый дескриптор $fh2 не печатает свой оператор с помощью Perl?


<<pre>my $map_file="/home/rpsa/DEMO/mapfile.txt";
open( my $fh,  '<', $map_file )            or die( $! );
open( my $fh1, '>', "result_file.txt" ) or die( $! );

while ( my $line = <$fh> ) {
    next unless ( defined( $line ) && $line );
    my @cols = split( /:/, $line );
    print $fh1 $cols[-1], "\n";
}

if(open( my $fh2, '<', "result_file.txt" ) || die( $! ))
{
while ( my $row = <$fh2> ) {
	chomp $row;
	print "****$row****";
}
}
else
{
warn "could not open the file ";
}


Что я уже пробовал:

Я попытался прочитать текстовый файл с первого цикла while, но не смог этого сделать.Помогите мне решить мои проблемы.

1 Ответов

Рейтинг:
9

Jochen Arndt

Это потому, что файл result_file.txt он все еще открыт для записи, и содержимое еще не было записано физически (сброшено), когда вы снова открываете его для чтения.

В то время как вы можете принудительно смыть воду с помощью $fh1->flush(), лучшим решением является закрытие дескрипторов файлов, когда они больше не нужны:

close($fh1);
close($fh);
if(open( my $fh2, '<', "result_file.txt" ) || die( $! ))
{
    while ( my $row = <$fh2> ) {
    	chomp $row;
    	print "****$row****";
    }
    close($fh2);
}