Perl—— 文件读写

一 读取一行

读取一行的方式有两种,分别为:    (1) 使用方法 readline(FILEHANDLE) ; (2) 使用符号<>

# my 申明为局部变量,作用域
my $filename = "a.txt";
my $encoding = "";
my $handle = undef;

#打开
open($handle,"<",$filename) || die "$0 : can't open $filename for reading:$!";

#read a line,读取时包含该行的\n符号也会读取 方式一
$line = <$handle>;

#去除行的\n
chomp($line);
print $line;

#read a line 方式二
$line = readline($handle);
print $line;

#关闭
close($handle);

二 读取所有行到列表中

使用 @array = <FILEHANDLE>

my $filename = "a.txt";
my $encoding = "";
my $handle = undef;

open($handle,"<",$filename) || die "$0 : can't open $filename for reading:$!";

#read a line
$line = <$handle>;
print $line;

#把剩余的行都读取到一个list里面
@arr = <xxFile>;
#遍历@arr
foreach $a (@arr) {
	print $a;
}

close($handle);

三 写入一行

使用 print FILEHANDLE LIST

#写文件
$xxfilename = "xx.txt";
# 写入模式 >表示覆盖之前的文件, >>表示追加在文件的尾部
open (xxFile ,">>",$xxfilename) or die "could not open $xxfilename : $!";
print xxFile ("aaaaaaaaaaabbdd\n");#注意圆括号前有空格, 若没有则会出错提示为undefined subroutine &main::xxFile
close(xxFile);

四 复制文件, 一行对一行

#把一个文件的内容复制到另外一个文件中

$srcFilename = "xx.txt";
$destFilename = "out.txt";

open(srcFile,"<",$srcFilename) or die "file could not open $srcFilename : $!";
open(destFile,">",$destFilename) or die "file could not open $destFilename : $!";
#循环写入,读取一行,写入一行
while($line = <srcFile>) {
	print destFile ($line);
}
close(srcFile);
close(destFile);

五 复制文件,读取任意字节数

读取:read FILEHANDLE,SCALAR,LENGTH

写入:syswrite FILEHANDLE,SCALAR

my $buffer = undef;
my $BUFSIZE = 4 * (2 ** 10);
my $srcFilename = "a.txt";
my $srcHandle = undef;

my $destFilename = "a_dest.txt";
my $destHandle = undef;

open($srcHandle,"<",$srcFilename) || die "$0 can't open $srcFilename : $!";
open($destHandle,">",$destFilename) || die "$0 can't open $destFilename : $!";

while(read($srcHandle,$buffer,$BUFSIZE)) {
	unless(syswrite $destHandle,$buffer){ #当写入出错时会执行unless里的语句,与if语句相反
		die "can't write to $destFilename : $!";
	}
}

#关闭文件
close($srcHandle) || die "can't close $srcFilename : $!";
close($destHandle) || die "can't close $destFilename : $!";

六 复制二进制文件

对二进制文件(如图片)进行操作时,与普通文件不一样,需要对文件引用对进行处理,使用 binmode FILEHANDLE

#操作二进制文件
my $buffer = undef;
my $BUFSIZE = 4 * (2 ** 10);
my $srcFilename = "bg1.png";
#my $encoding = ":encoding(UTF-16LE)";
my $srcHandle = undef;

my $destFilename = "bg1_dest.png";
my $destHandle = undef;

#打开二进制文件
open($srcHandle,"<",$srcFilename) || die "$0 can't open $srcFilename : $!";
open($destHandle,">",$destFilename) || die "$0 can't open $destFilename : $!";


##二进制处理##
for my $handle($srcHandle,$destHandle) {
	binmode($handle) || die "binmode failed";
}

while(read($srcHandle,$buffer,$BUFSIZE)) {
	unless(syswrite $destHandle,$buffer){ #当写入出错时会执行unless里的语句,与if语句相反
		die "can't write to $destFilename : $!";
	}
}


#关闭文件
close($srcHandle) || die "can't close $srcFilename : $!";
close($destHandle) || die "can't close $destFilename : $!";




  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值