ファイルのサイズを取得するには、stat関数(または、lstat関数)を利用します。stat関数はファイルのサイズや作成日、更新日などの情報を取得するための関数ですが、Windowsではその中のファイルのサイズ以外の項目についてはほとんど利用できないと言っても過言ではありません。
stat関数は、ファイルハンドルまたはドライブからすべて指定したファイル名を引数とします。結果は13項目にセットされますが、そのうちファイルのサイズは8番目の項目となっています。したがって、指定方法としては、
ファイルのサイズ = (stat ファイルハンドル)[7]
とするか
ファイルのサイズ = (stat "ファイル名")[7]
とします。
stat関数とlstat関数の違いは、stat関数がグリニッジ標準時でファイルの作成日や更新日をセットするのに対し、lstat関数がそれぞれの地域(日本であれば日本の)標準時をセットすることだけです。
# size.pl
# 内容 : ファイルのサイズ(バイト数)等を取得する。
# Copyright (c) 2002-2011 Mitsuo Minagawa, All rights reserved.
# (minagawa@fb3.so-net.ne.jp)
# 使用方法 : c:\>perl size.pl
#
open(IN1,"input.txt");
open(OUT1,">output.txt");
#
# 全項目を取得する場合
#
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat IN1;
print OUT1 "size1=$size\n";
#
# ファイルのサイズだけを取得する場合(ファイルハンドルを引数とする場合)
#
$size = (stat IN1)[7];
print OUT1 "size2=$size\n";
#
# ファイルのサイズだけを取得する場合(ファイル名を引数とする場合)
#
$size = (stat "c:/Perl64/html/index.html")[7];
print OUT1 "size3=$size\n";
close(IN1);
close(OUT1);
size1=1337
size2=1337
size3=1288