目录
文件操作
Perl文件操作比较好理解,将文件open后得到一个handle,通过这个handle对文件进行操作,和Linux相关系统接口非常类似,这个handle可以理解为Linux接口里的文件描述符。支持3种标准HANDLE:STDIN、STDOUT、STDERR。
open函数
open(HANDLE, ">file.txt");
sysopen(HANDLE, "file.txt", O_RDWR, PERMS);
open函数打开文件模式,参照下表:
模式 | 描述 |
---|---|
< 或 r | 只读方式打开,将文件指针指向文件头。 |
> 或 w | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
>> 或 a | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
+< 或 r+ | 读写方式打开,将文件指针指向文件头。 |
+> 或 w+ | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
+>> 或 a+ | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
sysopen函数打开文件模式,参照下表:
模式 | 描述 |
---|---|
O_RDWR | 读写方式打开,将文件指针指向文件头。 |
O_RDONLY | 只读方式打开,将文件指针指向文件头。 |
O_WRONLY | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
O_CREAT | 创建文件 |
O_APPEND | 追加文件 |
O_TRUNC | 将文件大小截为零 |
O_EXCL | 如果使用O_CREAT时文件存在,就返回错误信息,它可以测试文件是否存在 |
O_NONBLOCK | 非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。 |
sysopen函数最后一个参数PERMS代表8进制属性值,可选,默认是0x666.
close函数
打开文件后,如果不再使用该文件,就需要对该文件进行close,否则它占用的资源就不会释放。
close(HANDLE);
读写文件
读文件
<HANDLE> 从HANDLE中读取一行,可以作为右值直接赋给左边的标量。
写文件
print HANDLE "string"; 用print函数向HANDLE指向的文件中写入后面的数据。
文件重命名
rename(originName, targetName);
demo
#!/usr/bin/perl
$PATH="/home/hunk/code/Project_Code_Exercise/perl/basic";
open(HANDLE1, ">file1.txt");
print HANDLE1 "HELLO HANDLE1.\n";
print STDOUT "HELLO STDOUT.\n";
close(HANDLE1);
#copy from file1.txt to file2.txt
open(HANDLE1, "<file1.txt");
open(HANDLE2, ">>file2.txt");
while(<HANDLE1>)
{
print HANDLE2 $_;
}
print HANDLE2 "HELLO HANDLE2.\n";
close(HANDLE1);
close(HANDLE2);
#rename file
rename("$PATH/file1.txt", "$PATH/file1_copy.txt");
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# ./fileOper.pl
HELLO STDOUT.
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# cat file1_copy.txt
HELLO HANDLE1.
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# cat file2.txt
HELLO HANDLE1.
HELLO HANDLE2.
删除文件
#!/usr/bin/perl
unlink("/home/hunk/code/Project_Code_Exercise/perl/basic/file2.txt");
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# ll |grep file2
-rw-r--r-- 1 root root 30 8月 21 21:15 file2.txt
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# ./fileOper2.pl
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# ll |grep file2
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic# vim fileOper2.pl
root@n209-h246:/home/hunk/code/Project_Code_Exercise/perl/basic#
目录操作
和文件操作类似
function
opendir(HANDLE, dirPath); #打开目录
readdir(HANDLE); #读取目录
rewinddir(HANDLE); #定位指针到目录开头
telldir(HANDLE); #返回目录当前位置
seekdir(HANDLE, POS); #定位到目录的POS位置
close(HANDLE);
mkdir(dirPath); #创建目录,默认权限是0755,目录已经存在则会失败
rmdir(dirPath); #删除目录
demo
1 #!/usr/bin/perl -w
2 print "==========CASE1=========\n";
3 $dir = "/home/*";
4 my @files = glob($dir);
5 foreach (@files){
6 print $_."\n";
7 }
8
9 print "==========CASE2=========\n";
10 opendir(DIR, '.') or die "open current dir failed, $!";
11 while($file = readdir(DIR)){
12 print "$file\n";
13 }
14 closedir DIR;
15
16 print "==========CASE3=========\n";
17 $dir = "/home/test";
18 rmdir($dir);
19 mkdir($dir) or die "create dir failed,$!";
20 print "create dir success.\n";
21 rmdir($dir) or die "delete dir failed, $!";
22 print "delete dir success.\n";
23 $dir = "/home";
24 chdir($dir) or die "change dir failed, $!";
25 print "change dir success.\n";
26 $currPath = readpipe("pwd");
27 print "current work path: $currPath.\n";
[root@izuf682lz6444cynn96up0z basic]# ./dictOper.pl
==========CASE1=========
/home/workspace
==========CASE2=========
warn.pl
array1.pl
reference1.pl
reference2.pl
function.pl
.
dictOper.pl
until.pl
hello.pl
array.pl
array2.pl
..
control.pl
type.pl
reference.pl
foreach.pl
hash.pl
==========CASE3=========
create dir success.
delete dir success.
change dir success.
current work path: /home