Perl 파일 조작


Perl은 파일 핸들 유형이라는 변수를 사용하여 파일을 조작합니다.

파일에서 데이터를 읽거나 쓰려면 파일 핸들이 필요합니다.

파일 핸들은 I/O 연결의 이름입니다.

Perl은 각각 표준 입력, 표준 출력 및 표준 오류 출력을 나타내는 STDIN, STDOUT 및 STDERR의 세 가지 파일 핸들을 제공합니다.

Perl에서 파일을 열려면 다음 방법을 사용할 수 있습니다.

open FILEHANDLE, EXPR
open FILEHANDLE

sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE

매개변수 설명:

  • FILEHANDLE: 파일 핸들, 저장에 사용됨 고유한 파일 식별자.

  • EXPR: 파일 이름과 파일 액세스 유형으로 구성된 표현식입니다.

  • 모드: 파일 액세스 유형.

  • PERMS: 권한 비트.


Open 함수

다음 코드에서는 open 함수를 사용하여 file.txt 파일을 읽기 전용 모드(<)로 엽니다.

open(DATA, "<file.txt");

<는 읽기 전용 모드를 나타냅니다.

코드의 DATA는 파일을 읽는 데 사용되는 파일 핸들입니다. 다음 예제에서는 파일을 열고 파일 내용을 출력합니다.

#!/usr/bin/perl

open(DATA, "<file.txt") or die "file.txt 文件无法打开, $!";

while(<DATA>){
   print "$_";
}

다음 코드는 쓰기 위해 파일을 엽니다( > ) file.txt:

open(DATA, ">file.txt") or die "file.txt 文件无法打开, $!";

>는 작성 방법을 나타냅니다.

읽기-쓰기 모드로 파일을 열어야 하는 경우 > 또는 < 문자 앞에 + 기호를 추가할 수 있습니다.

open(DATA, "+<file.txt"); or die "file.txt 文件无法打开, $!";

이 방법은 파일의 원본 내용을 삭제하지 않습니다. 파일의 형식은 다음과 같습니다.

open DATA, "+>file.txt" or die "file.txt 文件无法打开, $!";

파일에 데이터를 추가하려면 데이터를 추가하기 전에 추가 모드에서 파일을 열면 됩니다.

open(DATA,">>file.txt") || die "file.txt 文件无法打开, $!";

> ;>는 기존 파일의 끝에 데이터를 추가한다는 의미입니다. 추가할 파일 내용을 읽어야 하는 경우 + 기호를 추가할 수 있습니다.

open(DATA,"+>>file.txt") || die "file.txt 文件无法打开, $!";

다음 표에는 다양한 액세스 모드가 나와 있습니다.

模式描述
< 或 r只读方式打开,将文件指针指向文件头。
> 或 w写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
>> 或 a写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
+< 或 r+读写方式打开,将文件指针指向文件头。
+> 或 w+读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
+>> 或 a+读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

Sysopen 함수

sysopen 함수는 매개변수 형식이 다르다는 점을 제외하면 open 함수와 유사합니다.

다음 예에서는 읽기-쓰기(+<filename) 모드로 파일을 엽니다.

sysopen(DATA, "file.txt", O_RDWR);

파일을 업데이트하기 전에 파일을 지워야 하는 경우 쓰기 방법은 다음과 같습니다.

sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );

O_CREAT를 사용하여 새 파일을 만들 수 있습니다. O_WRONLY는 쓰기 전용 모드이고 O_RDONLY는 읽기 전용 모드입니다.

PERMS 매개변수는 8진수 속성 값으로, 파일이 생성된 후의 권한을 나타냅니다. 기본값은 0x666입니다.

다음 표에는 가능한 모드 값이 나열되어 있습니다.

模式描述
O_RDWR读写方式打开,将文件指针指向文件头。
O_RDONLY只读方式打开,将文件指针指向文件头。
O_WRONLY写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
O_CREAT创建文件
O_APPEND追加文件
O_TRUNC将文件大小截为零
O_EXCL如果使用O_CREAT时文件存在,就返回错误信息,它可以测试文件是否存在
O_NONBLOCK                    非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。

닫기 기능

파일을 사용한 후 파일 핸들과 관련된 입력 및 출력 버퍼를 새로 고치려면 파일을 닫아야 합니다. 파일을 닫는 구문은 다음과 같습니다.

close FILEHANDLE
close

FILEHANDLE은 지정된 파일 핸들이며, 성공적으로 닫히면 true를 반환합니다.

close(DATA) || die "无法关闭文件";

파일 읽기 및 쓰기

파일에 정보를 읽고 쓰는 방법에는 여러 가지가 있습니다.

<FILEHANDL> 연산자

열린 파일 핸들에서 정보를 읽는 기본 방법은 <FILEHANDLE> 스칼라 컨텍스트에서는 파일 핸들에서 단일 행을 반환합니다. 예:

#!/usr/bin/perl

print "php中文网网址?\n";
$name = <STDIN>;
print "网址:$name\n";

위 프로그램이 실행되면 다음 정보가 표시됩니다. URL을 입력하면 인쇄 문이 출력됩니다.

<FILEHANDLE> 연산자를 사용하면 파일 핸들의 각 줄 목록이 반환됩니다. 예를 들어 모든 줄을 배열로 가져올 수 있습니다.

다음 내용으로 import.txt 파일을 만듭니다.

$ cat import.txt 
1
2
3

import.txt를 읽고 각 줄을 @lines 배열에 넣습니다.

#!/usr/bin/perl

open(DATA,"<import.txt") or die "无法打开数据";
@lines = <DATA>;
print @lines;    # 输出数组内容
close(DATA);

위 프로그램을 실행합니다. 출력 결과는 다음과 같습니다.

1
2
3

getc 함수

xgetc 함수는 지정된 FILEHANDLE에서 단일 문자를 반환하고, 지정하지 않은 경우 STDIN을 반환합니다.

getc FILEHANDLE
getc

오류가 발생하면 또는 파일에 핸들이 파일 끝에 있으면 undef가 반환됩니다.


읽기 함수

읽기 함수는 버퍼의 파일 핸들에서 정보를 읽는 데 사용됩니다.

이 함수는 파일에서 바이너리 데이터를 읽는 데 사용됩니다.

read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH

매개변수 설명:

  • FILEHANDLE: 파일 핸들, 고유한 파일 식별자를 저장하는 데 사용됩니다.

  • SCALAR: 위치 읽기를 시작합니다.

  • LENGTH: 읽은 내용의 길이입니다.

  • 오프셋: 오프셋.

읽기가 성공하면 읽은 바이트 수를 반환하고, 파일 끝이면 0을, 오류가 발생하면 undef를 반환합니다.

인쇄 기능

파일 핸들에서 정보를 읽는 모든 기능에 대해 백엔드의 주요 쓰기 기능은 인쇄입니다:

print FILEHANDLE LIST
print LIST
print

파일 핸들 및 인쇄 기능 사용 결과 프로그램 실행은 출력 장치(STDOUT: 표준 출력)로 전송될 수 있습니다. 예:

print "Hello World!\n";

파일 복사

다음 예에서는 기존 파일 file1.txt를 열고 Take를 읽습니다. 각 행을 file2.txt 파일에 기록합니다.

#!/usr/bin/perl

# 只读方式打开文件
open(DATA1, "<file1.txt");

# 打开新文件并写入
open(DATA2, ">file2.txt");

# 拷贝数据
while(<DATA1>)
{
   print DATA2 $_;
}
close( DATA1 );
close( DATA2 );

파일 이름 바꾸기

다음 예에서는 기존 파일 file1.txt의 이름을 file2.txt로 바꾸고 디렉터리는 아래에 있음을 지정합니다. /usr/php/test/:

#!/usr/bin/perl

rename ("/usr/php/test/file1.txt", "/usr/php/test/file2.txt" );

함수 renames는 두 개의 매개변수만 허용하고 기존 파일의 이름만 바꿉니다.

파일 삭제

다음 예에서는 unlink 기능을 사용하여 파일을 삭제하는 방법을 보여줍니다.

#!/usr/bin/perl

unlink ("/usr/php/test/file1.txt");

파일 위치 지정

tell 함수를 사용하여 파일의 위치를 ​​가져올 수 있고 seek 함수를 사용하여 파일 내 위치를 지정할 수 있습니다.

tell 함수

tell 함수를 사용하여 파일 위치를 가져옵니다.

tell FILEHANDLE
tell

FILEHANDLE이 지정되면 이 함수는 파일 포인터의 위치를 ​​바이트 단위로 반환합니다. 지정하지 않으면 기본적으로 선택된 파일 핸들을 반환합니다.

seek 함수

seek() 함수는 파일 핸들을 통해 파일 읽기 및 쓰기 포인터를 이동하여 바이트 단위로 읽고 쓰는 방식으로 파일을 읽거나 쓰는 것입니다. >매개변수 설명:

    FILEHANDLE: 파일 핸들, 고유한 파일 식별자를 저장하는 데 사용됩니다.
  • POSITION: 파일 핸들(읽기 및 쓰기 위치 포인터)로 이동할 바이트 수를 나타냅니다.
  • WHENCE: 파일 핸들(읽기 및 쓰기 위치 포인터)이 이동하기 시작할 때의 시작 위치를 나타냅니다. 가능한 값은 각각 시작을 나타내는 0, 1, 2입니다. 파일의 현재 위치, 파일의 끝.
  • 다음 예에서는 파일 시작 부분부터 256바이트를 읽습니다.
seek FILEHANDLE, POSITION, WHENCE

파일 정보

Perl의 파일 작업도 수행할 수 있습니다. 먼저 파일이 존재하는지, 읽고 쓸 수 있는지 등을 테스트합니다.

먼저 다음과 같이 file1.txt 파일을 생성할 수 있습니다.

seek DATA, 256, 0;
rrree

위 프로그램을 실행하면 출력 결과는 다음과 같습니다.

$ cat file1.txt 
www.php.cn

파일 테스트 연산자는 다음과 같습니다. 아래 표 :

操作符描述
-A文件上一次被访问的时间(单位:天)
-B是否为二进制文件
-C文件的(inode)索引节点修改时间(单位:天)
-M文件上一次被修改的时间(单位:天)
-O文件被真实的UID所有
-R文件或目录可以被真实的UID/GID读取
-S为socket(套接字)
-T是否为文本文件
-W文件或目录可以被真实的UID/GID写入
-X文件或目录可以被真实的UID/GID执行
-b为block-special (特殊块)文件(如挂载磁盘)
-c为character-special (特殊字符)文件(如I/O 设备)
-d为目录
-e文件或目录名存在
-f为普通文件
-g文件或目录具有setgid属性
-k文件或目录设置了sticky位
-l为符号链接
-o文件被有效UID所有
-p文件是命名管道(FIFO)
-r文件可以被有效的UID/GID读取
-s文件或目录存在且不为0(返回字节数)
-t文件句柄为TTY(系统函数isatty()的返回结果;不能对文件名使用这个测试)
-u文件或目录具有setuid属性
-w文件可以被有效的UID/GID写入
-x文件可以被有效的UID/GID执行
-z文件存在,大小为0(目录恒为false),即是否为空文件,