을 읽는 방법은 텍스트 파일로서 Perl

작업입니다. 가 텍스트 파일입니다. 당신은 그것의 내용으로는 스칼라에 변수 Perl 프로그램입니다.

이러한 문제가 자주 나타납. 예를 들어,같은 문제가 발생할 수 있습니다 읽기 구성 파일 작은 데이터 파일이 있습니다. 로 처리해야 하는 경우 큰 파일,그것은 더 나은이 방법을 사용하지 않고 사용할 스트림에서 읽습니다.

솔루션입니다. 을 사용하는 라이브러리 경로::작

가장 간단하고 편리한 솔루션을 사용하여 Perl 라이브러리 경로::작

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :utf8);

use Path::Tiny;

my $file_name = 'a.txt';

my $content = path($file_name)->slurp_utf8();

print $content;

여기에 path('a.txt') 개체를 만듭의 클래스 경로::작고 ->slurp_utf8() 메소드를 호출 slurp_utf8 이 개체입니다. 결과 변수에 $content 팝 모든 파일 내용.

이것은 좋은 해결책이지만,거기에 하나 있습니다. 라이브러리 경로::작은하지 않으로 Perl,그것을 둬야 한다. 일반적으로 이로 인해 문제가 발생하지는 않지만,일부 상황에서는 이 솔루션은 적합하지 않습니다.

솔루션입니다. 파일을 읽는 표준 도구 Perl

이 솔루션은 그렇지 않은 편리한 사용하는 것으로 라이브러리 경로::작은,내가 쓸 수 있지만,그것의 설치를 필요로하지 않습니다 추가 라이브러리입니다.

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :utf8);

my $file_name = 'a.txt';

my $content = '';

open FILE, '<', $file_name or die $!;

while (<FILE>) {
    $content .= $_;
}

print $content;

사용 open 우리가 만든 파일 핸들러 FILE. 으로 작업할 때 open 사용하는 것이 중요하 세 개의 인수를 그리고 그것은 매우 중요하게 쓰 or die,지 || die. 도움으로 다음 while (<FILE>) 우리 주위에 실행 파일이 라인 라인에 의해 수집하는 모든 콘텐츠는 변수로 $content.

처음에는 우리는 할당 변수 $content 빈 줄 ''. 이것은 만들기 위해서는 코드에서는 올바르게 작동의 경우 빈 파일(을 할당하지 않으면 빈 문자열의 경우 빈에 있는 파일 변수 $content 것입니다 undef).

매우 위험한 결정입니다. 사용 cat

여기에는 다른 방법은 어떻게 읽을 수 있는 파일 내용으로는 변수입니다. 이 솔루션이 필요하지 않습 추가 라이브러리를 필요로하지 않는 많은 코드를 작성,하지만 이것은 스파이크 솔루션입니다. 그것은 최고의 결코 작성합니다. 을 할 수 있는 유일한 방법은 이 때 프로젝트가 없 Path::Tany,이 적극적으로 노력하고 확인하는 프로그램의 다른 부분야 중 일부는 빠른 코드를 읽는 파일입니다. 그러나 이 경우에,당신은 다음 필요한 코멘트를 남겨 # TODO 에서 첫 번째 제거 할 수있는 기회를 이 코드입니다.

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :utf8);

my $file_name = 'a.txt';

my $content = `cat $file_name`;

print $content;

이 결정합니다. 먼저 오류가 없습니다 처리가 있습니다. 파일이 아닌 경우,다음 STDERR 경고를 받게 됩 cat: asdf: No such file or directory지만,프로그램이 추가로 이동합니다. 둘째로,그것은 작동하지 않는 경우는 파일 이름에는 공간입니다. 셋째,면 변수 내용이 $file_name 우리는 외부 얻을 기회가 있는 것과 같은 것입 a.txt; rm -rf / 그리고 이외에 파일을 읽는 아직도 실행한 안전하지 않은 역할을합니다.

다른 기사