加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl文件句柄相关的常见变量

发布时间:2020-12-15 23:38:36 所属栏目:大数据 来源:网络整理
导读:对应的官方手册:http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles 默认情况下: $/ :输入行的分隔符以换行符为单位,可以使用 $/ 指定 $ :print输出行的分隔符为undef,可以使用 $ 指定,例如指定换行符"n" $, :print输出列表

对应的官方手册:http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles

默认情况下:

  • $/:输入行的分隔符以换行符为单位,可以使用$/指定
  • $:print输出行的分隔符为undef,可以使用$指定,例如指定换行符"n"
  • $,:print输出列表(也就是每个逗号分隔的部分)的字段分隔符为undef,可以使用$,指定,例如指定空格
  • $":默认在双引号上下文中,数组被输出的时候是使用空格作为分隔符的,可以使用$"指定列表分隔符
  • $.:当前处理到的行号$.。它是一个行号计数器。文件句柄关闭时会重置行号,但重新打开文件句柄时不会重置
    • 由于读取文件的输入符号<>从不会显式关闭文件句柄,所以从命令行ARGV读取的文件行号会不断增加
  • $ARGV:表示当前处理的文件,注意区分:@ARGV表示命令行参数,$ARGV[N]表示的是@ARGV数组中的某个元素
  • $|:控制写入或输出数据时是否先放进缓冲再刷入文件句柄
    • 值为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"也会保留在行中。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读