输入与输出
1、读取标准输入(键盘输入的形式都称标准输入)
$line = ; #读取下一行
chomp($line); #截掉最后的换行符
chomp($line = ); #习惯用法,效果同上
如果读到文件结尾(end-of-file), "行输入"操作符就会返回undef。这样的设计是为了配合循环使用,可以自然地跳出循环:
while (defined($line = )) {
print "I saw $line";
}
while () {
print "I saw $_";
}
foreach () {
print "I saw $_";
}
注意: 在while循环和foreach的循环时是不同的,while循环时,perl会读取一行输入,把它存入变量并且执行循环的主体。接下来,它会回头去寻找其他的输入行。但是在foreach循环里,“行输入”操作符会在列表上下文中执行(因为foreach需要逐项处理列表的内容)。为此,在循环能够开始执行之前,它必须先将输入全部读进来。假如输入来自4000M大小的WEB服务器日志文件,他们的差异会十分明显!因此最好的做法,通常是尽量使用while循环的简写,让它每次处理一行。
2、钻石操作符输入
perl中有一种读取输入的方法,就是使用 钻石操作符<>。
例如:
[root@localhost aaa]# cat aaa.txt
aaa
bbb
ccc
[root@localhost aaa]# cat test2.pl
#!/usr/bin/perl
#test2
while (<>) {
chomp; #不加参数时,chomp会直接作用在$_上。节约按键,从小地方做起。
print "I was $_ that I saw!\n";
}
[root@localhost aaa]# ./test2.pl aaa.txt
I was aaa that I saw!
I was bbb that I saw!
I was ccc that I saw!
注意:假如钻石操作符无法打开某个文件并读入内容,便会显示相关的出错诊断信息,就像:
不能打开wilma:无此文件或目录(can't open wimal: No such file or directory)
然后钻石操作符会自动跳到下一个文件,就像cat或其他标准工具程序的做法一样。
3、钻石操作符调用参数
钻石操作符其实不回去检查调用参数,它的参数其实是来自@ARGV数组,这个数组是perl实现内建起来的特殊数组。
钻石操作符会查看数组@ARGV以决定该用哪些文件名,如果它找到的是空列表,就会该用标准输入流;否则,就会使用@ARGV里的文件列表。
例如:
[root@localhost aaa]# cat 1.txt
nihao
beijing
[root@localhost aaa]# cat 2.txt
nihao
shanghai
[root@localhost aaa]# cat 3.txt
nihao
guangzhou
[root@localhost aaa]# cat test2.pl
#!/usr/bin/perl
#test2
@ARGV = qw# 1.txt 2.txt 3.txt #; #强制让钻石操作符读这三个文件。
while (<>) {
chomp;
print "I was $_ that I saw!\n";
}
[root@localhost aaa]# perl test2.pl
I was nihao that I saw!
I was beijing that I saw!
I was nihao that I saw!
I was shanghai that I saw!
I was nihao that I saw!
I was guangzhou that I saw!
4、标准输出
print <>; #和Unix下的cat类似
print sort <>; #和Unix下的sort命令功能差不多。
print (2+3); #它会打印5。
5、使用 printf格式化打印输出
[root@localhost ~]# cat test.pl
#!/usr/bin/perl
#test
$user = zhangsan;
$days_to_die = 30;
printf "Hello, %s; your password expires in %d days!\n", $user, $days_to_die; #%s 指定字符串格式, %d指数字格式
[root@localhost ~]# perl test.pl
Hello, zhangsan; your password expires in 30 days!
[root@localhost ~]# cat test.pl
#!/usr/bin/perl
#test
$user = zhangsan;
$days_to_die = 30;
printf "Hello, %s; your password expires in %d days!\n", $user, $days_to_die;
printf "%g %g %g\n", 5/2, 51/17, 51 ** 17;
printf "in %d days!\n", 17.85;
printf "%6d\n", 42;
printf "%2d\n", 2e3 + 1.95;
printf "%10s\n", "wilma";
printf "%-10s\n", "wilma";
printf "%12f\n", 6 * 7 + 2/3;
printf "%12.3f\n", 6 * 7 + 2/3;
printf "%12.0f\n", 6 * 7 + 2/3;
printf "Monthly interest rate: %.2f%%\n", 5.25/12;
[root@localhost ~]# perl test.pl
Hello, zhangsan; your password expires in 30 days!
2.5 3 1.0683e+29
in 17 days!
42
2001
wilma
wilma
42.666667
42.667
43
Monthly interest rate: 0.44%
6、文件句柄
有六种特殊文件句柄是Perl保留的,它们的名字是STDIN、STDOUT、STDERR、DATA、ARGV和ARGVOUT。虽然你可以选择任何喜欢的文件句柄名,但不应使用保留的名字,除非确实需要以特殊方式使用上述六个句柄。
7、打开文件句柄
open CONFIG, " open BEDROCK, ">fred";
open LOG, ">>logfile";
my $selected_output = "my_output";
open LOG, "> $selected_output";
在相对新的Perl(5.6版之后)中,open另有一种使用三个参数的写法:
open CONFIG, "<", "dino";
open BEDROCK, ">", $file_name;
open LOG, ">>", &logfile_name();
8、关闭文件句柄
close LOG;
close CONFIG;
close BEDROCK;
9、使用文件句柄
print LOG "北京欢迎你!\n";
printf STDERR "%s.\n", aasdf;
10、改变默认的文件输出句柄
select BEDROCK;
print "I hope Mr. Slate doesn't find out about this.\n";
print "Wilma!n";
默认情况下,假如你不为print(printf)指定文件句柄, 它的输出就会送到STDOUT。不过你可以使用select操作符来改变默认的文件句柄。
$I=1,如果你想改回原先的STDOUT,可以用它
本文来源:http://www.benet.wang/perl%E7%BC%96%E7%A8%8B/89.html";
perl自学笔记整理
原创
©著作权归作者所有:来自51CTO博客作者安全守望者的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
如何快速自学开源项目?试试我的诀窍
学习开源项目最好的方式就是亲身参与项目的开发,这也是我一直建议大家做的,不仅能提升能力、也能给自己的简历加分。
开源项目 业务流程 项目结构 GitHub 程序员 -
Sqlmap tamper 脚本整理
一、说明SQLMAP是一个用于测试SQL注入问题的强大工具,工具有很多可用的选项,使用sqlmap -hh可以看到具体的说明,其可用的选项进行了分类,包括Target、Request、Optimization、Injection、Detection、Techniques、Fingerprint、Enumeration、Brute force、User-deficed function inject
sqlmap tamper base64encode charunicodeencode randomcomments -
WSL2 Kali 整理
Windows 11 wsl2
发行版 linux Docker -
perl自学小练习
perl并不难学只有你肯学习
利用perl简单练习一下sort