设为首页 收藏本站
查看: 1135|回复: 0

[经验分享] perl 文件操作

[复制链接]

尚未签到

发表于 2018-9-1 06:48:23 | 显示全部楼层 |阅读模式
  http://blog.csdn.net/xrt95050/archive/2011/05/03/6386662.aspx
  perl 文件操作 收藏
  打开、关闭文件
  open (filevar, filename)
  filevar为文件句柄,或者说是程序中用来代表某文件的代号
  filename为文件名,其路径可为相对路径,亦可为绝对路径
  open(FILE1,"file1");
  open(FILE1, "/u/jqpublic/file1");
  打开文件时必须决定访问模式
  open(FILE1,"file1");
  read
  open(outfile,">outfile");
  write写模式将原文件覆盖,原有内容丢失
  open(appendfile, ">>appendfile");
  append
  open的返回值用来确定打开文件的操作是否成功,成功时返回非零值,失败时返回零:
  if (! open(MYFILE, "myfile")) {
  die ("cannot open input file file1\n");
  }
  open (MYFILE, "file1") || die ("Could not open file");
  close (MYFILE);
  例子.读文件并显示
  #!/usr/bin/perl
  &gotest("/home/macg/perltest/gogo");
  &gotest("/home/macg/www/index.html");
  &gotest("jk");
  sub gotest{
  my(@tmp)=@_;
  open (MYFILE, $tmp[0]) || die ("Could not open file");
  @array = ;      此句不是读一行,而是读整个文件
  foreach (@array) {
  print $_;
  }
  close(MYFILE);
  }
  [macg@localhost perltest]$ ./tip.pl
  kkkkk               第一个文件gogo读出
  第二个文件index.html读出
  
  
  
  
  
  
  
  
  第三个文件jk不存在,程序走die语句
  Could not open file at ./tip.pl line 9
  打开管道文件--------操作非常简单,就是以带管道符号的命令作为文件名字符串
  执行一个管道命令
  假设管道命令创建一个临时文件
  再OPEN这个临时文件到句柄
  [macg@localhost perltest]$ vi tip.pl
  #!/usr/bin/perl
  &gotest("ls -l |");
  sub gotest{
  my(@tmp)=@_;
  open (MYFILE, $tmp[0]) || die ("Could not open file");
  @array = ;
  foreach (@array) {
  print $_;
  }
  close(MYFILE);
  }
  [macg@localhost perltest]$ ./tip.pl
  total 16
  -rw-rw-r--  1 macg macg   6 Mar 16 13:06 gogo
  -rwxrwxr-x  1 macg macg 192 Mar 17 16:53 tip.pl
  读文件
  $line = ;
  读一行
  并把文件指针向后移动一行
  @array = ;
  读全部
  文件的每一行(含回车符)为@array的一个字符串元素
  最简单的显示文件
  @array = ;      一次读整个文件,读入一个字符串数组
  foreach (@array) {            再打印字符串数组的每一个元素(每一行)
  print $_;
  }
  [macg@localhost perltest]$ ./tip.pl
  
  
  
  
  
  
  my($line);
  while ($line=) {循环读一行,读不出就为NULL(0)
  print $line;
  }
  $line = ;      从键盘读一行
  ,类似C的gets();
  chomp 函数,截去变量尾端的\n换行,常与键盘输入合用,方法有二種:
  1    $yourans=;
  chomp $yourans;
  2    chomp ($yourans=);
  注意:一定不要用while (chomp($line=)),因为chomp总是返回0值,和while($line=)是不同的
  while($line=){
  chomp($line);  把 chomp放在循环里边
  …
  }
   和  的区别
  先说相同点:都支持标准输入读取
  不同点: 可以将输入定向到命令行参数
  vi  readfile.pl
  #! /usr/bin/perl
  while () {
  print;
  }
  ./readfile.pl index.html    就是读取第一个命令行参数所指的文件
  ./readfile.pl               如果不带任何参数执行,就是由标准输入STDIN读取
  写文件     print/printf  句柄 (字串);
  open(OUTFILE, ">outfile");
  print OUTFILE ("Here is an output line.\n");
  print STDERR ("File file1 exists.\n");
  print STDOUT ("File file1 exists.\n");
  最简单的文件COPY
  #!/usr/bin/perl
  &gotest("ls -l |","test");
  sub gotest{
  my(@tmp)=@_;
  open (READFILE, $tmp[0]) || die ("Could not open file");
  open (WRITEFILE, ">".$tmp[1]) || die ("Could not open file");
  my($line);
  while ($line=) {
  print WRITEFILE $line;
  }
  close(READFILE);
  close(WRITEFILE);
  }
  [macg@localhost perltest]$ ./tip.pl
  [macg@localhost perltest]$ ls
  gogo  test  tip.pl
  [macg@localhost perltest]$ cat test
  -rw-rw-r--  1 macg macg   6 Mar 16 13:06 gogo
  -rwxrwxr-x  1 macg macg 297 Mar 17 17:43 tip.pl
  上例同时也是一次管道文件的建立,相当于ls –l >test
  -e  文件是否存在        -d 目录是否存在
  #!/usr/bin/perl
  chomp($file=);
  &gotest($file);
  sub gotest{
  my(@tmp)=@_;
  if (-e $tmp[0]) {
  print "file is exist\n";
  } else { print "file not found\n"; }
  }
  [macg@localhost perltest]$ ./tip.pl
  gogo
  file is exist
  [macg@localhost perltest]$ ./tip.pl
  kd
  file not found
  #!/usr/bin/perl
  chomp($file=);
  &gotest($file);
  sub gotest{
  my(@tmp)=@_;
  if (-d $tmp[0]) {
  print "directory is exist\n";
  } else { print "directory not found\n"; }
  }
  [macg@localhost perltest]$ ls -F
  gogo  test  testdir/  tip.pl*
  [macg@localhost perltest]$ ./tip.pl
  kj
  directory not found
  [macg@localhost perltest]$ ./tip.pl
  testdir
  directory is exist
  if (!-e $file)      如果文件不存在
  -r,-w,-x 权限
  if (-w $file) {
  print "$file 写权限!\n";
  }
  if (-x $file) {
  print "$file 读权限!\n";
  }
  -z是否为空文件,-s是否非空
  if (-z $tmp[0]) {
  print "file is empty\n";
  }
  if ($len= -s $tmp[0]) {  -s不仅能判断文件非空,还兼有计算文件大小的工作
  print "file length is $len \n";
  }
  [macg@localhost perltest]$ touch pp
  [macg@localhost perltest]$ ./tip.pl
  pp
  file is empty
  [macg@localhost perltest]$ ./tip.pl
  gogo
  file length is 6
  -l  是否为符号链接
  -T  是否为文本文件
  基本文件操作
  删文件
  #!/usr/bin/perl
  chomp($file=);
  &gotest($file);
  sub gotest{
  my(@tmp)=@_;
  my($len);
  unlink $tmp[0] if -e $tmp[0];
  }
  [macg@localhost perltest]$ ls
  go  test  testdir  tip.pl
  [macg@localhost perltest]$ ./tip.pl
  go
  [macg@localhost perltest]$ ls
  test  testdir  tip.pl
  [macg@localhost perltest]$ ls
  dd  test  testdir  tip.pl
  [macg@localhost perltest]$ ./tip.pl
  /home/macg/perltest/dd           全路径删除
  [macg@localhost perltest]$ ls
  test  testdir  tip.pl
  rename("原文件名", "新名");
  #!/usr/bin/perl
  &gotest("gogo","dd");
  sub gotest{
  my(@tmp)=@_;
  rename($tmp[0],$tmp[1]);
  }
  [macg@localhost perltest]$ ls
  gogo  pp  test  testdir  tip.pl
  [macg@localhost perltest]$ ./tip.pl
  [macg@localhost perltest]$ ls
  dd  pp  test  testdir  tip.pl
  取文件属性,共13个属性
  #!/usr/bin/perl
  chomp($file=);
  &gotest($file);
  sub gotest{
  my(@tmp)=@_;
  my(@sta)=stat($tmp[0]);
  my($j);
  for($j=0;$j

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-560294-1-1.html 上篇帖子: 2种简单的perl socket 下篇帖子: Perl内部变量
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表