perl 文件 *** 作

perl 文件 *** 作,第1张

概述http://blog.csdn.net/xrt95050/archive/2011/05/03/6386662.aspx   perl 文件 *** 作 收藏 打开、关闭文件    open (filevar, filename)     filevar为文件句柄,或者说是程序中用来代表某文件的代号     filename为文件名,其路径可为相对路径,亦可为绝对路径 open(FILE1,"file1

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 = <MYfile>;      此句不是读一行,而是读整个文件
foreach (@array) {
 print $_;
   }
close(MYfile);
}
 
[macg@localhost perltest]$ ./tip.pl
kkkkk               第一个文件gogo读出

第二个文件index.HTML读出
<Meta http-equiv="Content-Type" content="text/HTML; charset=gb2312">

<frameset rows=20%,*>
  <frame src=\'#\'" frameborder="no" scrolling="no">
  <frameset cols=30%,*>
    <frame src=\'#\'" frameborder="no" name="left">
    <frame src=\'#\'" frameborder="no" name="right">
  </frameset>
</frameset>

第三个文件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 = <MYfile>;
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 = <MYfile>;
 读一行
并把文件指针向后移动一行
 
@array = <MYfile>;
 读全部
文件的每一行(含回车符)为@array的一个字符串元素
 

最简单的显示文件

@array = <MYfile>;      一次读整个文件,读入一个字符串数组

foreach (@array) {            再打印字符串数组的每一个元素(每一行)
 print $_;
      }
 
[macg@localhost perltest]$ ./tip.pl
<Meta http-equiv="Content-Type" content="text/HTML; charset=gb2312">

<frameset rows=20%,*>
  </frameset>
</frameset>
 
my($line);
while ($line=<MYfile>) {循环读一行,读不出就为NulL(0)
 print $line; 
 }
 

 

    $line =<STDIN> ;      从键盘读一行
,类似C的gets();
 

    chomp 函数,截去变量尾端的\n换行,常与键盘输入合用,方法有二�:

1    $yourans=<STDIN>;
      chomp $yourans;
 
2    chomp ($yourans=<STDIN>);
 

 

   注意:一定不要用while (chomp($line=<MYfile>)),因为chomp总是返回0值,和while($line=<MYfile>)是不同的

while($line=<MYfile>){
chomp($line);  把 chomp放在循环里边


 

 

   <> 和 <STDIN> 的区别
先说相同点:都支持标准输入读取
不同点:<> 可以将输入定向到命令行参数

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=<READfile>) {
 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<13;$j++) {
 print "no.$j is $sta[$j] \n";
  }
}
 
[macg@localhost perltest]$ ls
test  testdir  tip.pl
[macg@localhost perltest]$ ./tip.pl
test
no.0 is 770
no.1 is 809748
no.2 is 33204
no.3 is 1
no.4 is 500      uID
no.5 is 500
no.6 is 0
no.7 is 103     length文件大小
no.8 is 1174127246
no.9 is 1174124625
no.10 is 1174124625
no.11 is 4096
no.12 is 16  
 
 

 

    文件copy命令              必须先use模块file

#!/usr/bin/perl

chomp($file=<>);
chomp($file2=<>);
&gotest($file,$file2);

sub gotest{
my(@tmp)=@_;
use file::copy;     在perl主目录下查找file/copy.pm

copy($tmp[0],$tmp[1]);
}  
 
[macg@localhost perltest]$ ./tip.pl
test
newtest
[macg@localhost perltest]$ ls
newtest  test  testdir  tip.pl 


 
[root@localhost perltest]# ls -F /usr/lib/perl5/5.8.6/file
Basename.pm  CheckTree.pm  Compare.pm  copy.pm  DosGlob.pm  Find.pm  Path.pm  Spec/  Spec.pm  stat.pm  Temp.pm

 

 

   目录 *** 作
  chdir("testdir") || dIE "$!";
  mkdir($dir,0755)  || dIE "$!";
  rmdir("testdir") || dIE "$!";

#!/usr/bin/perl

chomp($directory=<>);
chomp($choice=<>);
&gotest($directory,$choice);

sub gotest{
my(@tmp)=@_;

if($tmp[1]) {
mkdir($tmp[0],0755)  || dIE "$!";
   } else {
rmdir($tmp[0]) || dIE "$!";
     }
}
 
[macg@localhost perltest]$ ./tip.pl
newdir
1
[macg@localhost perltest]$ ls -F
newdir/  newtest  test  testdir/  tip.pl*  
[macg@localhost perltest]$ ./tip.pl
testdir
0
Directory not empty at ./tip.pl line 13,<> line 2
rmdir的dIE信息
 


   改变文件属性和所属(需在root下才能起作用。换句话说,这是必须在ROOT下执行的PERL语句)

chmod(0755,"file1.txt","file2.txt"); 
 
$uID=500;
$gID=500;
chown($uID,$gID,"file2.txt");  
 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xrt95050/archive/2011/05/03/6386662.aspx

总结

以上是内存溢出为你收集整理的perl 文件 *** 作全部内容,希望文章能够帮你解决perl 文件 *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1288226.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存