Perl输⼊输出,参数给⼊,⽂件读写,⽂件夹操作
#!/usr/bin/perl -w
>>>>>>>>>>>>>>###
# File Name: test2.pl
# Author: kevin xiang
# Created Time: 2014年07⽉07⽇星期⼀ 14时56分37秒
>>>>>>>>>>>>>>###
print "输⼊输出\n";
#从标准输⼊设备输⼊键盘输⼊
#while (defined($line=<STDIN>)){
#    print "I saw $line \n";
#}
#while (defined($_=<STDIN>)){
#    print "I saw $_ \n";
#}
#从<>输⼊可能是键盘或者其他,
#如果是执⾏ ./test2.pl file1.log 就会以log⽂件输⼊
#如果是执⾏ ./test2.pl <file1.log >file2.log, 就是告诉shell
#从file1.log读⼊,将结果写⼊到file2.log⽂件中
#while (defined($line=<>)){
#    print "I saw $line \n";
#}
#外部输⼊参数将保存到@ARGV这个数组中,可以⽤shift或foreach迭代
print "调⽤参数 @ARGV\n";
#输出到设备
@array = qw(qwrr asdf 123.12);
print "@array\n";
printf("array[2]: %d\n", $array[2]);
#利⽤X复制运算符,直接将数组作参数给⼊
printf("array:"."%10s"x@array."\n", @array);
perl是用来干嘛的
#⽂件句柄
#使⽤open打开⽂件file1.log,⽂件句柄为FD,使⽤close关闭⽂件句柄
#得到句柄后,根据<FD>即可读取⽂件内容
#错误退出使⽤ die, $!能给出错误原因
#给出警告使⽤ warn, 和die⼀样,只是不会退出程序
$openFlag = open(FD1, "<file1.log");
if($openFlag){
print "打开⽂件成功\n";
@lines =<FD1>;
print "打开⽂件内容:\n";
print "@lines\n";
open(FDW, ">>file3.log");
printf(FDW "写⼊内容:@lines");
close FDW;
close FD1;
}else{
die "打开⽂件失败: $!\n";
}
print "no die\n";
#使⽤readline 读取⽂件每⼀⾏的内容
open(FD2, "<file1.log") or die "can't open this file: $!";
$lineNum = 1;
foreach $lineContext (readline FD2){
print "line $lineNum: $lineContext";
$lineNum++;
}
close FD2;
#!/usr/bin/perl -w
>>>>>>>>>>>>>>### # File Name: test5.pl
# Author: kevin xiang
# Created Time: 2014年07⽉08⽇星期⼆ 16时06分43秒
>>>>>>>>>>>>>>### print "⽂件夹操作\n";
#chdir 切换⽂件夹
#chdir "/root";
#glob ⽂件名模式匹配
@root_files = glob "*.deb";
print "root dir files: @root_files\n";
#<*> ⽀持多个参数, 输出/opt 和 /root下的内容
@opt_files = </opt/* /root/*>;
print "opt dir files: @opt_files\n";
#⽬录句柄 opendir readdir closedir
$dir = "/root";
opendir(FD, $dir) or die "can't open $dir: $!";
$fileNum = 1;
foreach $file (readdir FD){
print "file $fileNum: $file\n";
$fileNum++;
}
closedir FD;
#删除⽂件 unlink, 返回值为成功删除⽂件的个数
unlink "1.rm" or warn "remove this file fail: $!";
unlink glob "*.rm";
#删除⽬录
rmdir "dirrm";
#创建⽬录
mkdir "dirrm2",0755;
#mkdir "dirrm2",oct(0755);
#重命名⽂件
rename "name.log","name2.log" or warn "rename file fail: $!";
www.jb51/article/12782.htm
perl ⽂件读写详细说明
语法为open (filevar, filename),其中filevar为⽂件句柄,或者说是程序中⽤来代表某⽂件的代号,filename为⽂件名,其路径可为相对路径,亦可为绝对路径。
open(FILE1,"file1");
open(FILE1, "/u/jqpublic/file1");
打开⽂件时必须决定访问模式,在PERL中有三种访问模式:读、写和添加。后两种模式的区别在于写模式将原⽂件覆盖,原有内容丢失,形式为:
open(outfile,">outfile");⽽添加模式则在原⽂件的末尾处继续添加内容,形式为:open(appendfile, ">>appendfile")。要注意的是,不能对⽂件同时进⾏读和写/添加操作。
open的返回值⽤来确定打开⽂件的操作是否成功,当其成功时返回⾮零值,失败时返回零,因此可以如下判断:
if (open(MYFILE, "myfile")) {
# here's what to do if the file opened successfully
}
当⽂件打开失败时结束程序:
unless (open (MYFILE, "file1")) {
die ("cannot open input file file1\n");
}
亦可⽤逻辑或操作符表⽰如下:
open (MYFILE, "file1") || die ("Could not open file");
当⽂件操作完毕后,⽤close(MYFILE); 关闭⽂件。
语句$line = <MYFILE>;从⽂件中读取⼀⾏数据存储到简单变量$line中并把⽂件指针向后移动⼀⾏。<STDIN>为标准输⼊⽂件,通常为键盘输⼊,不需要打开。
语句@array = <MYFILE>;把⽂件的全部内容读⼊数组@array,⽂件的每⼀⾏(含回车符)为@array的⼀个元素。
形式为:
open(OUTFILE, ">outfile");
print OUTFILE ("Here is an output line.\n");
注:STDOUT、STDERR为标准输出和标准错误⽂件,通常为屏幕,且不需要打开。
1、⽂件测试操作符
语法为:-op expr,如:
if (-e "/path/file1") {
print STDERR ("File file1 exists.\n");
}
⽂件测试操作符
操作符描述
-b是否为块设备
-c是否为字符设备
-d是否为⽬录
-e是否存在
-f是否为普通⽂件
-g是否设置了setgid位
-k是否设置了sticky位
-l是否为符号链接
-
o是否拥有该⽂件
-p是否为管道
-r是否可读
-s是否⾮空
-t是否表⽰终端
-u是否设置了setuid位
-w是否可写
-x是否可执⾏
-z是否为空⽂件
-A距上次访问多长时间
-B是否为⼆进制⽂件
-
C距上次访问⽂件的inode多长时间
-M距上次修改多长时间
-O是否只为“真正的⽤户”所拥有
-R是否只有“真正的⽤户”可读
-S是否为socket
-T是否为⽂本⽂件
-W是否只有"真正的⽤户"可写
-X是否只有"真正的⽤户"可执⾏
注:“真正的⽤户”指登录时指定的userid,与当前进程⽤户ID相对,命令suid可以改变有效⽤户ID。
例:
unless (open(INFILE, "infile")) {
die ("Input file infile cannot be opened.\n");
}
if (-e "outfile") {
die ("Output file outfile already exists.\n");
}
unless (open(OUTFILE, ">outfile")) {
die ("Output file outfile cannot be opened.\n");
}
等价于
open(INFILE, "infile") && !(-e "outfile") &&
open(OUTFILE, ">outfile") || die("Cannot open files\n");
象C⼀样,PERL也有存储命令⾏参数的数组@ARGV,可以⽤来分别处理各个命令⾏参数;与C不同的是,$ARGV[0]是第⼀个参数,⽽不是程序名本⾝。
$var = $ARGV[0]; # 第⼀个参数
$numargs = @ARGV; # 参数的个数
PERL中,<>操作符实际上是对数组@ARGV的隐含的引⽤,其⼯作原理为:
1、当PERL解释器第⼀次看到<>时,打开以$ARGV[0]为⽂件名的⽂件;
2、执⾏动作shift(@ARGV); 即把数组@ARGV的元素向前移动⼀个,其元素数量即减少了⼀个。
3、<>操作符读取在第⼀步打开的⽂件中的所有⾏。
4、读完后,解释器回到第⼀步重复。
例:
@ARGV = ("myfile1", "myfile2"); #实际上由命令⾏参数赋值
while ($line = <>) {
print ($line);
}
将把⽂件myfile1和myfile2的内容打印出来。
⽤程序的形式也可以象命令⾏⼀样打开和使⽤管道(ex:ls > tempfile)。如语句open (MYPIPE, "| cat >hello"); 打开⼀个管道,发送到MYPIPE 的输出成为命令"cat >hello"的输⼊。由于cat命令将显⽰输⼊⽂件的内容,故该语句等价于open(MYPIPE, ">hello"); ⽤管道发送邮件如下:    open (MESSAGE, "| mail dave");
print MESSAGE ("Hi, Dave! Your Perl program sent this!\n");
close (MESSAGE);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论