# 文件内容 command.log first line second line third line # perl 程序 pro.pl while($line=<>) { print $line; print"ok\n"; } # 在命令行中键入 perl pro.pl command.log # 输出 first line ## 可以看到<>操作符逐行读取文件的内容保存在$line变量中 ok second line ok third line ok ##################### while(<>) { print $_; print"ok\n"; } ## 输出一样,<>默认存在$_中
print"this is a test\n"; # 也可以输出多个 print $val1,$val2,"hello"; ## 对于列表输出 @list = qw/this is a test/; print"@list\n"; print @list,"\n"; ## 输出 this is a test ## 结果不言而喻,第二种输出都堆到一起了 thisisatest
# command.log 文件内容 first line second line third line # pro.pl while($line = <STDIN>) { print $line; } # 命令行键入 perl pro.pl < command.log # <STDIN>是从command.log文件中读入 # output first line second line third line # 同理 > 是将<STDOUT>指向某个文件,而不是控制台
7. 文件句柄 open close
文件句柄是裸字,没有$这个美元符号
1 2 3 4 5
open FILE1,'file'; open FILE2,'> file1'; open FILE3,'< file2'; open FILE4,'>> file3'; # 以追加输入的方式打开文件 close FILE1;
# command.log 文件内容: first line second line third line # pro1.pl perl程序文件内容: open CMD,"< command.log"; $line = <CMD>; # <CMD>只能读取一行 print $line; close CMD; # output: first line # 只输出一行, ###################### #如果想要读取多行,如下写 # pro2.pl perl程序文件内容: open CMD,"< command.log"; $line = join"",<CMD>; # 将所有的行连接成一个大的字符串 print $line; close CMD; #output: first line second line third line ###################### # pro3.pl 也可以这么写,while循环输出所有行 open CMD,"< command.log"; while($line=<CMD>) { print $line; } close CMD;
open f0,'< info.log'; open f1,'> info.out'; print f1 ""; #用’>'方式打开info.out文件,写入空将文件info.out清空 close f1; open f1,'>> info.out'; #以递增的方式打开info.out
while($line=<f0>) { # 从行首\A匹配到行尾\Z,\Z表示行尾,在它之后也可以有换行符。 # 将匹配到的值保存在列表中 push @l,($line =~ m/(?<var>\A.+sequence.+\Z\n)/); print f1 $l[0]; pop @l; } close f0; close f1;
# 也可以这样写 # $line =~ m/(?<var>\A.+sequence.+\Z\n)/; # push @l,$1; # print f1 $l[0]; # pop @l;