2012-10-05 18 views
13

Rozważmy:Zapis do pliku w Perl

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

Powyższe jest prosty podprogram pisałem w Perlu, ale nie wydają się działać. Jak mogę to sprawić?

Odpowiedz

25

Zmienne są interpolowane tylko w łańcuchach przy użyciu podwójnych cudzysłowów ". Jeśli użyjesz pojedynczych cudzysłowów ', $ zostanie zinterpretowane jako dolar.

Spróbuj z ">>$files" zamiast '>>$files'

Zawsze używaj

use strict; 
use warnings; 

Pomoże to trochę więcej ostrzeżeń.

W każdym razie również zadeklarować zmienne

my $files = "..."; 

Należy również sprawdzić wartość zwracaną open:

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

Edit: Jak sugerowano w komentarzach, wersja z trzema argumentami otwarte i kilka innych możliwych ulepszeń

#!/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

Możesz również zainstalować Perl :: Critic jako przydatne narzędzie do sprawdzania typowych problemów i błędów w kodzie Perla. – Matteo

+6

Powinieneś zawsze używać otwartej trzyargumentowej wersji z leksykalnymi uchwytami plików 'otwórz mój plik $ uchwyt, '>>' , $ file or die 'Horribly'; ' – dgw

+0

Miałem kompilację problemów z rechotem. Zamiast tego użyj umrzeć –