Perl文件句柄相关常量变量
文件句柄相关变量
对应的官方手册:http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles
默认情况下:
$/
:输入行的分隔符以换行符为单位,可以使用$/
指定$\
:print输出行的分隔符为undef,可以使用$\
指定,例如指定换行符"\n"$,
:print输出列表(也就是每个逗号分隔的部分)的字段分隔符为undef,可以使用$,
指定,例如指定空格$"
:默认在双引号上下文中,数组被输出的时候是使用空格作为分隔符的,可以使用$"
指定列表分隔符$.
:当前处理到的行号$.
。它是一个行号计数器。文件句柄关闭时会重置行号- 由于读取文件的输入符号
<>
从不会显式关闭文件句柄,所以从命令行ARGV读取的文件行号会不断增加
- 由于读取文件的输入符号
$ARGV
:表示当前处理的命令行参数中的文件,注意区分:@ARGV
表示命令行参数$ARGV[N]
表示的是@ARGV
数组中的某个元素$ARGV
是命令行参数中各文件列表,perl当前正在处理的文件
$|
:控制写入或输出数据时是否先放进缓冲再刷入文件句柄- 值为0时,表示先缓存,缓冲了一段数据之后再刷入文件句柄通道
- 值为非0时,表示直接刷入文件句柄通道
- 在使用管道、套接字的时候,建议设置为非0值,以便数据能立刻被处理
- 该变量只对写数据或输出有效,对读取操作无效
注意:输出的分隔符只适用于print,不适用say。
例如:
1.指定输出行分隔符$\
。这样每次输出的时候,会自动在输出语句的尾部加上这个分隔符。可以指定多个字符作为分隔符。
{
my $\ = "\n";
print "new line1";
print "new line2";
print "new line3";
# 可以指定多个字符:$\ = "YYY"
}
上面将换行输出各行。
2.指定输出字段分隔符$,
。这样print语句中每个逗号隔开的地方都会按照指定的分隔符输出。
{
my $,="-";
print "new field1","new field2","new field3","\n";
# 可以指定多个字符:$, = "YYY"
}
上面将输出:new field1-new field2-new field3
3.数组输出字段分隔符$"
。当print的输出列表中有数组,且数组使用双引号包围的时候(即双引号上下文中数组替换),默认数组元素是使用空格分隔的,该分隔符指定元素之间的分隔符。
#!/usr/bin/perl
{
$"="x";
@arr=qw{perl python shell};
print "@arr","\n";
}
上面将输出:"perlxpythonxshell"。
4.$.
表示当前处理到的行号。文件句柄关闭时会重置行号,但重新打开文件句柄时不会重置。但由于读取文件的输入符号<>
从不会显式关闭文件句柄,所以ARGV读取的文件行号会不断增加。
#!/usr/bin/perl
# 打开文件,看行号
open LOG1,"<","test.log";
while(<LOG1>){
print "Line $.: $_";
}
print "---------------------\n";
close LOG1;
# 关闭上面的文件句柄后,再打开一次文件句柄,行号重置
open LOG2,"<","test.log";
while(<LOG2>){
print "Line $.: $_";
}
print "---------------------\n";
close LOG2;
# 从<>读内容,行号一直变大
while(<>){
print "Line $. from $ARGV: $_";
}
5.$/
控制的是输入行分隔符。在读取文件的时候,通过该特殊变量可以控制如何分行。
例如,以下是test1.log文件的内容:
a
b
x
c
d
x
e
以下是15.plx的源代码:
$/="x";
while(<>){
print "Line $.: $_","\n";
}
执行的结果:
注意换行符"x"也会保留在行中。
伪文件句柄DATA
经常地,想要在源码文件里读取一些文件数据来进行测试,这时可以直接使用一个预定义的伪文件句柄DATA。
... some code ...
从__DATA__或__END__开始的数据都将被DATA文件句柄读取,直到文件结尾
__DATA__
...一些待读取数据...
当perl编译器遇到__DATA__
或__END__
了,就意味着代码到此结束,下面的数据都将作为当前文件内有效的DATA文件句柄的数据流。
例如:
#!/usr/bin/perl
while(<DATA>){
chomp;
print "read from DATA: $_\n";
}
__DATA__
first line in DATA
second line in DATA
third line in DATA
last line in DATA
Inline::Files
DATA伪文件句柄的一个缺点是从遇到__DATA__
或__END__
起直到文件的尾部,都属于DATA文件句柄的内容,也就是说在源代码文件中只能定义一个伪文件句柄。
在CPAN上有一个Inline::Files
模块,它可以在同一个源代码文件中定义多个伪文件句柄。需要先安装:
cpan install Inline::Files
例如:
use Inline::Files;
use 5.010;
say "@main::FILE1";
say "@main::FILE2";
while(<FILE1>){
say "$_";
}
while(<FILE2>){
say "$_";
}
__FILE1__
first line in FILE1
second line in FILE1
third line in FILE1
__FILE2__
first line in FILE2
second line in FILE2
third line in FILE2
它像ARGV一样,在运行程序初始阶段就打开这些虚拟文件句柄,并将每个虚拟文件句柄保存到@<PACKNAME>::<HANDLE>
中。例如,上面的是示例是在main包中定义了FILE1和FILE2两个文件句柄,那么这两个文件句柄将保存到@main::FILE1
和@main::FILE2
中,并在处理某个文件句柄的时候,将其保存到标量$main::FILE1
或$main::FILE2
中。
可以同时定义多个名称相同的虚拟文件系统。例如:
__FILE1__
...
__FILE2__
...
__FILE1__
...
这时在@<packname>::FILE1
数组中就保存了两个元素,当处理第二个FILE1的时候,将自动重新打开这个文件句柄。
一般来说,这些就够了,更多详细的用法请参见官方手册:Inline::Files。
Perl文件句柄相关常量变量的更多相关文章
- history and its relevant variables in Linux/GNU and Mac OS history命令以及相关环境变量
对于Terminalor们,history命令并不陌生,什么!n, !!更是很常用的,而且您在命令行敲的cmds是默认保存在/home/$USER/.bash_history(linux) /User ...
- perl选项、特殊变量、一些函数参考手册
perl一行式程序系列文章:Perl一行式 本文用来收集Perl一行式中涉及到的一些选项.特殊变量的说明,可以用来做速查手册. 本文会逐渐更新. 第一次学Perl一行式时,请直接忽略本文内容,并直接从 ...
- perl学习之内置变量
Perl内置特殊变量 一.正则表达式特殊变量:1.$n :包含上次模式匹配的第n个子串2.$& :前一次成功模式匹配的字符串3.$` :前次匹配成功的子串之前的内容4.$’ :前次匹配 ...
- Swift入门学习之一常量,变量和声明
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/6059421.html Swift入门学习之一常量,变量和 ...
- 速战速决 (1) - PHP: 概述, 常量, 变量, 运算符, 表达式, 控制语句
[源码下载] 速战速决 (1) - PHP: 概述, 常量, 变量, 运算符, 表达式, 控制语句 作者:webabcd 介绍速战速决 之 PHP 概述 常量 变量 运算符 表达式 控制语句 示例1. ...
- Swift学习(四)常量&变量&基础数据类型
常量和变量 常量: 使用let关键词来声明一个常量 所指向的是一个特定类型的值,如数字10或者字符”hello”,常量的值是不能够被二次修改的 编程时使用常量能够让代码看起来更加安全和简洁! let ...
- 关于Makefile.am中与Build相关的变量设置 AM_CPPFLAGS
http://tonybai.com/2010/10/26/about-variables-related-to-building-in-makefile-am/ 关于Makefile.am中与Bui ...
- C#1 输入输出 常量变量
C# 输入输出 常量变量 //输出 Console.WriteLine("这是一行文字"); 自动回车的. Console.Write("Hello world&qu ...
- JAVA_SE基础——7.常量&变量
上一篇,我讲了标识符&关键字 这篇我来解释下变量&常量~~~ 变量与常量这两个概念相信大家都不会感到陌生,在数学中就已经涉及了变量与常量.理解变量与常量,可以举这样一个例子: 例 ...
随机推荐
- 挑选队友 (生成函数 + FFT + 分治)
链接:https://www.nowcoder.com/acm/contest/133/D来源:牛客网 题目描述 Applese打开了m个QQ群,向群友们发出了组队的邀请.作为网红选手,Applese ...
- vi中删除所有查找到的行
vi中删除所有查找到的行 在linux中查找文件,结果中有很多是.svn目录里的,把查找结果放到一个文件里. 用vi打开该文件,按ESC,进入命令行模式,输入 :g/\.svn/d 就可以把所有含”. ...
- Vue笔记整理——第一天
1.为什么学习Vue? 提高开发效率. 提高效率历程:原生js——>jq(解决兼容性)——>前端模板引擎——>Vue.js(减少DOM操作,注重数据业务逻辑). 2.框架与库的区别? ...
- 基于react可无限向内部添加节点的tree
这两天学习react,撸了一遍文档后开始自己动手写点东西. 正好从朋友那得到灵感,写一个小例子. 这个东西是这样的,就是点击的这个节点就往它里面添加一个child. 于是乎!我想到的就是用自调函数,递 ...
- bash基础特性1
shell俗称壳(用来区别于内核),是指“提供使用者使用界面”的软件,就是一个命令行解释器. BASH是SHELL的一种,是大多数LINUX发行版默认的SHELL,除BASH SHELL外还有C SH ...
- windos64位下python3.6安装pywin32的问题
~~~~今天终于算是正式接触scrapy了,测试的时候发现少装了一个pywin32的模块,然后安装了好久,中间碰到好多坑,最后总算是装好了. 首先我自己的py3.6是64位版本的,这是pywin32模 ...
- 利用正则+requests爬取猫眼电影信息
import json # from multiprocessing import Pool import requests from requests.exceptions import Reque ...
- Maven package 报错解决记录以及编译scala的pom.xml
可以打包的pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...
- CentOS 7 - 更新JDK,删除旧JDK,安装新JDK
一,检查是否安装JDK. yum list installed | grep java 二,删除旧JDK. yum -y remove java-1.7.0-openjdk* yum -y remov ...
- 微信APP支付,支付宝APP支付demo
最近公司新开发的APP中,需要集成微信支付和支付宝支付,2个平台申请的都是APP支付.这是个人第一次单独的,完整的做完2个平台的支付. 这里我主要用到了2个接口:支付接口,订单查询接口,虽然2个平台的 ...