in reply to writing to a file when using diamond operator

The problem is when you open the file for writing: you are reopening it every time you read a line, clobbering its contents and overwriting it with the current line.

You need to open the file before you start the loop and close it after you finish reading it.

#!/usr/bin/perl use warnings; use strict; my $fichier_sortie = 'sortie.txt'; open my $sortie, '>', $fichier_sortie or die "Can't open $Fichiersor +tie: $!"; while (<>){ chomp; my $voir = $_; $voir =~ s/o/y/g; say {$sortie} $voir; } close $sortie;

Update: Fixed a bug (I said "after you finish", but didn't).

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^2: writing to a file when using diamond operator
by paschacroutt (Acolyte) on May 03, 2024 at 15:20 UTC

    OK. Thanks Choroba, that makes sense.

    However your code didn't work at first, and reading that you said

    You need to open the file before you start the loop and close it after you finish reading it.

    I tried

    #!/usr/bin/perl use warnings; use strict; my $fichier_sortie = 'sortie.txt'; open my $sortie, '>', $fichier_sortie or die "Can't open $Fichiersor +tie: $!"; while (<>){ chomp; my $voir = $_; $voir =~ s/o/y/g; say {$sortie} $voir; } close $sortie;

    And Yay !

      Of course, you're right. Sorry for the confusion.

      map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

        Hm… With this construct I sense that I won't be able to forge the output file name from the content of the input file.