2012-10-05 21 views
13

Bedenken Sie:Schreiben in eine Datei in Perl

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

Die oben ein einfaches Unterprogramm, das ich in Perl geschrieben, aber es scheint nicht zu funktionieren. Wie kann ich es zum Laufen bringen?

Antwort

25

Variablen werden nur in Strings mit doppelten Anführungszeichen interpoliert ". Wenn Sie einfache Anführungszeichen ' verwenden, wird die $ als ein Dollar interpretiert.

mit ">>$files" Versuchen statt '>>$files'

Immer

use strict; 
use warnings; 

Es wird dazu beitragen, einige weitere Warnungen zu bekommen verwenden.

Auf jeden Fall auch Variablen deklarieren

my $files = "..."; 

Sie auch den Rückgabewert von open überprüfen sollten:

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

bearbeiten: Wie in den Kommentaren vorgeschlagen, eine Version mit den drei Argumente offen und ein paar andere mögliche Verbesserungen

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

Sie können Perl :: Critic auch als nützliches Tool zur Überprüfung häufiger Probleme und Fehler im Perl-Code – Matteo

+6

installieren. Sie sollten immer die Drei-Argument-Version von open mit lexikalischen Dateihandles verwenden. Öffnen Sie mein $ Dateihandle, >> , $ file oder die 'Horribly'; ' – dgw

+0

Ich hatte Probleme mit Croak kompilieren. Verwenden Sie stattdessen sterben –