web-dev-qa-db-fra.com

Écrire dans un fichier en Perl

Considérer:

#!/usr/local/bin/Perl
$files = "C:\\Users\\A\\workspace\\CCoverage\\backup.txt";
unlink ($files);
open (OUTFILE, '>>$files');
print OUTFILE "Something\n";
close (OUTFILE);

Ce qui précède est un simple sous-programme que j'ai écrit en Perl, mais cela ne semble pas fonctionner. Comment puis-je le faire fonctionner?

15
Daanish

Les variables sont interpolées uniquement dans les chaînes à l'aide de guillemets doubles ". Si vous utilisez des guillemets simples ' les $ sera interprété comme un dollar.

Essayez avec ">>$files" au lieu de '>>$files'

Toujours utiliser

use strict;
use warnings;

Cela aidera à obtenir des avertissements supplémentaires.

Dans tous les cas, déclarez également les variables

my $files = "...";

Vous devez également vérifier la valeur de retour de open:

open OUTFILE, ">>$files"
  or die "Error opening $files: $!";

Edit: Comme suggéré dans les commentaires, une version avec les trois arguments ouverts et quelques autres améliorations possibles

#!/usr/bin/Perl

use strict;
use warnings;

# warn user (from perspective of caller)
use Carp;

# use Nice English (or awk) names for ugly punctuation variables
use English qw(-no_match_vars);

# declare variables
my $files = 'example.txt';

# check if the file exists
if (-f $files) {
    unlink $files
        or croak "Cannot delete $files: $!";
}

# use a variable for the file handle
my $OUTFILE;

# use the three arguments version of open
# and check for errors
open $OUTFILE, '>>', $files
    or croak "Cannot open $files: $OS_ERROR";

# you can check for errors (e.g., if after opening the disk gets full)
print { $OUTFILE } "Something\n"
    or croak "Cannot write to $files: $OS_ERROR";

# check for errors
close $OUTFILE
    or croak "Cannot close $files: $OS_ERROR";
27
Matteo