Latest web development tutorials

Perlのファイル操作

Perlは、ファイルの種類を操作する変数ファイルハンドルと呼ばれる技術を使用しています。

ファイルからデータを読み取りまたは書き込みファイルハンドルを使用する必要があります。

ファイルハンドル(ファイルハンドル)は、I / O接続の名前です。

STDIN、STDOUT、STDERR、標準入力、標準出力、標準エラー出力を表す:Perlのは、3つのファイルハンドルを提供します。

Perlのファイルは、次の方法で開くことができます。

open FILEHANDLE, EXPR
open FILEHANDLE

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

パラメータ説明:

  • FILEHANDLE:ファイルの一意の識別子を格納するために使用されるファイルハンドル、。
  • EXPR:ファイル名や表現からなるファイルのアクセスタイプ。
  • MODE:ファイルのアクセスタイプ。
  • PERMS:アクセスビット(許可ビット)。

Open関数

私たちは、ファイルfile.txtをを開くには、読み取り専用モード(<)を開くために、次のコード関数を使用します。

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

<読み取り専用表現。

コードデータファイルハンドルがファイルを読み取るために使用され、次の例では、出力のファイルとファイルの内容を開きます。

#!/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 ファイルヘッダにファイルポインタを書き込むために開いて、ファイルサイズをゼロにカットされます。 ファイルが存在しない場合は、作成しようとします。
>>または、 ファイルの末尾にファイルポインタを書き込むために開きます。 ファイルが存在しない場合は、作成しようとします。
+ <またはR + 、読み取りと書き込みのためにファイルヘッダへのファイルポインタを開きます。
+>またはW + 読み込みと書き込みのためのオープン、ファイルヘッダへのファイルポインタとファイルサイズがゼロにカットされます。 ファイルが存在しない場合は、作成しようとします。
>> +またはA + ファイルの末尾にファイルポインタを読み書きのためにオープンします。 ファイルが存在しない場合は、作成しようとします。

sysopenで機能

sysopenでの関数は、関数を開くに似ていますが、彼らは、引数の同じ形式ではありません。

次の例は、ファイルを開くには(+ <ファイル名)の道を読み書きに基づいています。

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

あなたはファイルの前に空にファイルを更新する必要がある場合は、次のように書かれています:

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

あなたはO_RDONLY、O_WRONLY書き込み専用モードに新しいファイルを作成し、読み取り専用モードにするためにO_CREATを使用することができます。

PERMSパラメータオクタルプロパティ値は、ファイルのアクセス権を作成した後、デフォルトは0x666であることを示しています

次の表は、使用可能なモードの値を示します。

モード 説明
O_RDWR 、読み取りと書き込みのためにファイルヘッダへのファイルポインタを開きます。
O_RDONLY ファイルヘッダにのみファイルポインタを読み込みのためにオープン。
O_WRONLY ファイルヘッダにファイルポインタを書き込むために開いて、ファイルサイズをゼロにカットされます。 ファイルが存在しない場合は、作成しようとします。
O_CREAT ファイルを作成します。
O_APPEND ファイルを追加
O_TRUNC ファイルサイズがゼロに切断されます
O_EXCL あなたがO_CREATファイルが存在している使用している場合、それはエラーメッセージを返し、それはファイルが存在するかどうかをテストすることができます
O_NONBLOCK 私たちが成功するか、すぐにエラーを返し、ブロックされていないいずれかのように、I / O操作をノンブロッキング。

Close関数

ファイルで使用した後、ファイルを閉じると、次の構文を持っているに関連付けられているファイルハンドルの入力および出力バッファをリフレッシュしたいファイルを閉じます。

close FILEHANDLE
close

指定されたファイルハンドルのFILEHANDLE、正常に閉じられたが真。

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

ファイルを読み書きします

読み取りと書き込みの情報をファイルに、いくつかの異なる方法があります。

<FILEHANDL>演算子

開いているファイルハンドルから情報を読み取る主な方法は、<FILEHANDLE>演算子です。 スカラコンテキストでは、ファイルハンドルから単一の行を返します。 例えば:

#!/usr/bin/perl

print "本教程网址?\n";
$name = <STDIN>;
print "网址:$name\n";

上記の手順を実施した後、以下の情報は、我々は、URLのprint文の出力を入力します:

私たちは、リスト内の行ごとにファイルハンドルを返します。<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関数

あなたはリターンSTDINを指定しない場合xgetc関数は、指定したFILEHANDLEから単一の文字を返します。

getc FILEHANDLE
getc

エラーが発生した場合、またはファイルの末尾にファイルハンドルならば、それはundefを返します。


関数を読んで

読み取り機能は、ファイルのバッファから読み出された情報を処理するために使用されます。

この関数は、ファイルからバイナリデータを読み取るために使用されます。

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

パラメータ説明:

  • FILEHANDLE:ファイルの一意の識別子を格納するために使用されるファイルハンドル、。
  • SCALAR:位置を読んで起動します。
  • LENGTH:コンテンツの長さを読み取ります。
  • OFFSET:オフセット。

成功したリターンが読み込まれたバイト数を読み取るようにした場合、ファイルの終わりが、場合は、エラーがundefを返し発生した場合、0を返します。

印刷機能

すべての情報は、main関数の後端にファイルハンドル機能から読み取られるためにプリントを作成することです:

print FILEHANDLE LIST
print LIST
print

例えば、:ファイルとプリンタの機能は出力装置(標準出力STDOUT)に実行した結果を処理することができます使用します。

print "Hello World!\n";

ファイルのコピー

次の例では、我々は既存のファイルFILE1.TXTを開いて、それをファイルFILE2.TXT内に書き込まれたそれぞれの行を読み込みます。

#!/usr/bin/perl

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

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

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

ファイルの名前を変更

以下の例では、我々はすでにFILE2.TXTは/ usr / w3big /テスト/の下に指定したディレクトリの名前を変更FILE1.TXTファイルを既存のでしょう。

#!/usr/bin/perl

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

関数は、唯一のファイルが既に存在する二つのパラメータは、名前が変更されます受け入れ名前を変更します。

ファイルを削除します

次の例では、我々はこのファイルを削除するためには、unlink関数を使用方法を示します。

#!/usr/bin/perl

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

ファイルの場所を指定します。

あなたは、ファイルの場所を取得するのtell機能を使用し、シーク機能を使用して、ファイル内の位置を指定することができます。

関数を教えて

ファイルの場所を取得するために使用される関数を言います。

tell FILEHANDLE
tell

FILEHANDLE場合、関数はバイト単位で、ファイルポインタの位置を返します。 デフォルト選択したファイルハンドルへの復帰を指定しない場合。

シーク機能を

()関数は、読み取りおよび書き込みポインタファイルを読み書きする方法を、バイト単位で読み出しおよび書き込みファイルハンドルファイルを移動するために使用されるシーク:

seek FILEHANDLE, POSITION, WHENCE

パラメータ説明:

  • FILEHANDLE:ファイルの一意の識別子を格納するために使用されるファイルハンドル、。
  • POSITIONは:移動する(読み取りと書き込み位置ポインタ)ファイルハンドルのバイト数を示します。
  • WHENCE:ファイルハンドルを表しますが(読み書き位置ポインタ)をするときの開始位置開始、あなたは0、1の値を取ることができ、ファイルの先頭、現在位置、ファイルの終わりを意味します。

次の例では、ファイルの先頭から256バイトを読み取るために、次のとおりです。

seek DATA, 256, 0;

ファイル情報

Perlのファイル操作は、ファイルが存在し、読み取り、書き込みを行っているかどうかをテストすることができます。

私は、次の内のようFILE1.TXTファイルを、作成することができますどのような:

$ cat file1.txt 
www.w3big.com
#/usr/bin/perl

my $file = "/usr/test/w3big/file1.txt";
my (@description, $size);
if (-e $file)
{
	push @description, '是一个二进制文件' if (-B _);
	push @description, '是一个socket(套接字)' if (-S _);
	push @description, '是一个文本文件' if (-T _);
	push @description, '是一个特殊块文件' if (-b _);
	push @description, '是一个特殊字符文件' if (-c _);
	push @description, '是一个目录' if (-d _);
	push @description, '文件存在' if (-x _);
	push @description, (($size = -s _)) ? "$size 字节" : '空';
	print "$file 信息:", join(', ',@description),"\n";
}

上記のプログラムは、出力は次のようになります。

file1.txt 信息:是一个文本文件, 15 字节

次の表のテスト演算子をファイル:

演算子 説明
-A ファイルに最初にアクセスした時間(単位:日)
-B それはバイナリファイルであるかどうか
-C ファイル(iノード)のinode変更時刻(単位:日)
-M ファイルだった最終更新時刻(単位:日)
-O すべてのファイルが実UIDです
-R ファイルまたはディレクトリが実UID / GIDで読み取ることができます
-S ソケット(ソケット)
-T それはテキストファイルであるか否か
-W ファイルまたはディレクトリが実UID / GIDに書き込むことができます
-X ファイルやディレクトリは、実UID / GIDを実行することができます
-b ブロック型特殊(特別ブロック)ファイル(例えばマウント・ディスクなど)
-c 文字特殊(特殊文字)(そのようなI / Oデバイスとしての)ファイル
-d ディレクトリ
-e ファイルまたはディレクトリ名が存在します
-f 通常ファイル
-g ファイルまたはディレクトリがsetgidの属性を持っています
-k ファイルまたはディレクトリがスティッキービットを持っています
-l これは、シンボリックリンクであります
-o すべてのファイルが有効なUIDです
-p ファイルには、名前付きパイプ(FIFO)であります
-r ファイルは、効果的にUID / GID読み取ることができます
-s ファイルまたはディレクトリが存在し、0でない(バイト数を返します)
-t ファイルハンドルは、TTY(システム関数isatty()は、結果を返します。ファイル名は、このテストを使用することはできません)されています
-u ファイルまたはディレクトリがsetuidの属性を持っています
-w ファイルが有効なUID / GIDに書き込むことができます
-x ファイルは、効果的にUID / GIDを実行することができます
-z ファイルが0のサイズ(定数ディレクトリがfalse)、存在し、それは、ファイルが空であるかどうか、です