2012-02-24 2 views
0

나는 perl에 매우 익숙하며 질문이 있습니다. 디렉토리에 파일을 만들고 그 파일에 쓰려고합니다. 여기까지 제가 가지고있는 것은 디렉토리를 생성하지만 그 안에 아무것도 쓰지 않습니다. 파일에 쓰는 방법을 알아낼 수 없으며 티 또는 다차원 배열을 만드는 것을 살펴 보았지만 작동하지 않았습니다. 한마디로파일 만들기 aa..zz 및 범위 연산자를 사용하여 파일에 AA..ZZ를 작성

#!/usr/bin/perl 
use strict; 
use warnings; 

my @alpha = ("aa".."bb"); 


for my $combo(@alpha) 
{ 
open(DFILE,"+>$combo") || die "die open failed"; 

while (<DFILE>) 
{ 
    print $_; 
} 
close(DFILE); 
} 
+3

왜 ()로 읽고 동일한 줄을 쓰고 있습니까? 당신의 목표는 무엇입니까? – perreal

답변

1

, DFILE 핸들과 열린 파일에 뭔가를 쓰고, 당신은

print DFILE 'something to print'; 

사용해야하지만, 특히 당신이가는 정확히 무엇인지, 조금 목표에 대한 혼란 스러워요 이 파일에 쓸 수 있습니다. 그것을 명확히 할 수 있습니까?

2

다음은 28 개의 파일을 만들고 filename의 대문자를 파일에 씁니다. 예를 들어, aa이라는 파일을 만들고 하나의 행에 AA을 포함시킵니다.

use warnings; 
use strict; 
use File::Slurp; 

for ('aa' .. 'bb') { 
    write_file($_, uc $_); 
} 

File::Slurp를 참조하십시오.

0

쓰기 용 파일 (>)을 열고 읽기 용 파일 (+)을 개선했습니다. 파일을 열면 파일 핸들러에서 읽고 읽은 것을 기본 파일 핸들 (STDOUT)으로 인쇄합니다. 작업이 끝나면 파일을 닫습니다.

파일이 없으면 파일을 만들고 읽을 내용이 없으며 아무 것도 인쇄되지 않으며 여전히 비어있는 파일을 닫습니다.

나는 당신이하려는 것을 모른다. 파일에 행을 추가하려는 경우 대신 파일을 열어 추가 할 수 있습니다 (>>).

#!/usr/bin/perl 
use strict; 
use warnings; 

my @alpha = ("aa".."ab"); 

for my $combo (@alpha) { 
    open my $fh, ">>", $combo or die "die open failed: $!"; 

    printf $fh "[%s] Here's a new line in $combo\n", scalar localtime; 
    } 

이 같은 출력 파일을 생성합니다 : 당신이하려고하는 경우

[Fri Feb 24 09:07:17 2012] Here's a new line in aa 
[Fri Feb 24 09:08:52 2012] Here's a new line in aa 

당신이 핸들에 인쇄 할 때, 당신은 당신이 사용하고자하는 파일 핸들 print 말할 필요 (당신이 티를 언급했기 때문에) 파일과 표준 출력으로 동시에 출력하면, 하나 이상의 다른 파일 핸들에 멀티 플렉스하는 파일 핸들을 생성 할 수 있습니다. IO::Tee는 당신을 위해 작업을 수행 할 수 있습니다 스크린과 파일을

#!/usr/bin/perl 
use strict; 
use warnings; 

use IO::Tee; # get from CPAN 

my @alpha = ("aa".."ab"); 

for my $combo (@alpha) { 
    open my $fh, ">>", $combo or die "die open failed: $!"; 
    my $tee = IO::Tee->new($fh, \*STDOUT); 
    printf $tee "[%s] Here's a new line in $combo\n", scalar localtime; 
    } 

지금 각 출력 라인이 두 장소로 이동합니다.

관련 문제