ファイルのコピー、移動
■この章で解説するモジュール
File::Copy (copy, move)
■この章でできること
・ファイルのコピーをする
・ファイルの移動をする

 ファイルのコピーや移動はFile::Copyモジュールを使うとできます。コピーはFile::Copy::copy関数、移動はFile::Copy::move関数を使います。では、サンプルです。

#!/usr/bin/perl

#############################################
# ファイルのコピー、移動のサンプル
# Author: "Perl Programming Tips"
#############################################

use File::Copy;

# ファイル作成、書き込み
open(HFILE1, ">file09_01_01.txt") or die($!);
print(HFILE1 "aaa\n") or die($!);
close(HFILE1);

# ファイル名を指定してコピー
print "copy:" . copy("file09_01_01.txt", "file09_01_02.txt") . "\n";

open(HFILE2, "<file09_01_02.txt") or die($!);
open(HFILE4, ">file09_01_04.txt") or die($!);
$rfile2 = \*HFILE2;
$rfile4 = \*HFILE4;

# ファイルハンドルを指定してコピー
print "copy:" . copy($rfile2, $rfile4) . "\n";

close(HFILE2);
close(HFILE4);

# ファイルを指定のディレクトリに移動
mkdir("temp") or die($!) unless (-e "temp");
print "move:" . move("file09_01_01.txt", "temp") . "\n";

 実行結果は次のようになります。

[g@630m temp]$ ll
合計 4
-rw-r--r-- 1 g g 835 2008-07-24 20:43 file09_01.pl
[g@630m temp]$ perl file09_01.pl 
copy:1
copy:1
move:1
[g@630m temp]$ ll
合計 16
-rw-r--r-- 1 g g  835 2008-07-24 20:43 file09_01.pl
-rw-rw-r-- 1 g g    4 2008-07-24 20:45 file09_01_02.txt
-rw-rw-r-- 1 g g    4 2008-07-24 20:45 file09_01_04.txt
drwxrwxr-x 2 g g 4096 2008-07-24 20:45 temp
[g@630m temp]$ ll temp/
合計 4
-rw-rw-r-- 1 g g 4 2008-07-24 20:45 file09_01_01.txt

 はじめにコピー元のファイル「file09_01_01.txt」をopen関数で作成しています。copy関数にはコピー元のファイル、コピー先のファイルを指定します。ファイル名、ファイルハンドルへのリファレンス、ファイルハンドルグロブのいずれかで指定します。

 上のサンプルでは、ファイル名を指定して「file09_01_01.txt」を「file09_01_02.txt」に、ファイルハンドルへのリファレンスを指定して「file09_01_02.txt」を「file09_01_04.txt」にコピーしています。

File::Copy::copy
ファイルをコピーする。
書式
copy source, dest, [buffsize]
引数
source:
コピー元ファイル(ファイル名、ファイルハンドルへのリファレンス、ファイルハンドルグロブのいずれか)
dest:
コピー先ファイル(ファイル名、ファイルハンドルへのリファレンス、ファイルハンドルグロブのいずれか)
buffsize:
コピー時に使われるバッファサイズ
戻り値
成功した場合は1。エラーの場合は0を返し$!をセットする。

 move関数には移動元のファイル名、移動先のファイル名またはディレクトリ名を指定します。移動先にファイル名を指定した場合は、その名前にリネームされます。上のサンプルでは、ファイル「file09_01_01.txt」を「temp」ディレクトリに移動しています。

File::Copy::move
ファイルを移動する。
書式
move source, dest
引数
source:
移動元ファイル
dest:
移動先ファイルまたはディレクトリ
戻り値
成功した場合は1。エラーの場合は0を返し$!をセットする。

 File::Copyモジュールには、デフォルトでエクスポートされるcopy、move関数の他に、明示的にエクスポートするcp、mv関数があります。cp、mv関数はそれぞれcopy、move関数と同義です。