Perl输入与输出(1)
1. 标准输入和标准输出
1.1 从标准输入读取
- 标准输入分类
- 行操作符<STDIN>
- 钻石操作符<>
- 双钻石操作符<<>>
#!/usr/bin/perl
#行输入操作符,每次只读取标准输入的一行
while (defined($line = <STDIN>)) {
#读取标准输入 -> 存入变量$line -> 检查变量是否定义 -> 是否执行while循环主体
print "I saw $line."
}
#简写while循环
while (<STDIN>) {
#和上例结果一致,不过每次读取标准输入行的数据存储在默认变量$_中
print "I saw $_."
}
#foreach循环
foreach (<STDIN>) {
#和上例结果一致,不过每次读取标准输入行的数据存储在默认变量$_中
print "I saw $_."
}
-
foreach 和 while 循环的区别
- while中<STDIN>
- 标量上下文;
- 每次读取标准输入的一行,存储至默认标量$_;
- 读入行不为空,就执行while主体,否则退出循环;
- foreach中<STDIN>
- 列表上下文;
- 每次读取全部标准输入数据,存储至默认列表@_;
- 遍历读取文件的每一行,将每行的数据存储@_[i] ;
- while中<STDIN>
-
钻石操作符<>
-
钻石操作符,可以指定程序的输入源,即用户可以指定输入的读入位置。
- 如果我们脚本名称为 script.pl,当我们执行下句时:(a,b,c, - 都可以看做参数)
(1) ./script.pl
##读取标准输入
(2) ./script.pl a b c
##一次读取a,b,c三个文件内容,其中a的最后一行与b的最后一行紧密相联,即输入将a,b,c合成一个大文件
(3)/script.pl a - b
##按顺序读取a,标准输入,b的内容,将a,标准输入,b看做一个大文件
- 如果我们脚本名称为 script.pl,当我们执行下句时:(a,b,c, - 都可以看做参数)
-
双钻石操作符<<>>
- 双钻石操作符,用于修复钻石操作符的一个bug;对钻石操作,当文件名中有特殊字符,如 | ,管道符会引发管道操作,如果我们采用<<>>,他和钻石操作符的作用基本类似,只是不再启动外部程序,因此即使文件名为a|b,也不会出发管道操作,而是打开文件 a|b。
#!/usr/bin/perl
while (<>)