2012-10-05 39 views
13

Considere:escribir en un archivo en Perl

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

Lo anterior es una subrutina sencilla he escrito en Perl, pero no parece funcionar. ¿Cómo puedo hacer que funcione?

Respuesta

25

Las variables se interpolan solo en cadenas usando comillas dobles ". Si utiliza comillas simples ', el $ se interpretará como un dólar.

intento con ">>$files" en lugar de '>>$files'

Siempre utilizar

use strict; 
use warnings; 

Esto ayudará a conseguir más advertencias.

En cualquier caso declarar también las variables

my $files = "..."; 

También debe comprobar el valor de retorno de open:

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

Editar: Como se sugiere en los comentarios, una versión con los tres argumentos abierto y un par de otras posibles mejoras

#!/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"; 
+3

También puede instalar Perl :: Critic, una herramienta útil para verificar problemas comunes y errores en el código Perl – Matteo

+6

. Siempre debe usar la versión de tres argumentos de open con manejadores de archivos léxicos 'open my $ filehandle, '>>' , $ archivar o morir 'horriblemente'; ' – dgw

+0

He compilado problemas con croak. Use morir en su lugar –