2012-10-05 30 views
13

xem xét:Viết thư cho một tập tin trong Perl

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

Trên đây là một chương trình con đơn giản tôi đã viết trong Perl, nhưng nó dường như không làm việc. Làm thế nào tôi có thể làm cho nó hoạt động?

Trả lời

25

Biến được nội suy chỉ trong chuỗi sử dụng dấu ngoặc kép ". Nếu bạn sử dụng dấu ngoặc đơn ' số $ sẽ được hiểu là một đô la.

Hãy thử với ">>$files" thay vì '>>$files'

Luôn luôn sử dụng

use strict; 
use warnings; 

Nó sẽ giúp để có được một số cảnh báo nhiều hơn nữa.

Trong mọi trường hợp cũng khai báo các biến

my $files = "..."; 

Bạn cũng nên kiểm tra giá trị trở lại của open:

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

Sửa: Như đã đề cập trong các ý kiến, một phiên bản với ba đối số mở và một vài cải tiến có thể khác

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

Bạn cũng có thể cài đặt Perl :: Phê bình một công cụ hữu ích để kiểm tra các vấn đề thường gặp và lỗi trong mã Perl – Matteo

+6

Bạn nên luôn sử dụng phiên bản ba đối số mở bằng các tập tin từ vựng 'mở tập tin $ của tôi,' >> ' , $ file hoặc die 'Horribly'; ' – dgw

+0

Tôi đã gặp phải sự cố khi biên dịch. Sử dụng die thay vì –

Các vấn đề liên quan