术语汇编 全面认识Perl文件句柄

开发 架构
Perl文件句柄的概念你是否听过,Perl脚本通过Perl文件句柄连接到外部世界。从Perl文件句柄读就导入外部数据,向间接Perl文件句柄写则导出数据。

本文和大家重点讨论一下Perl文件句柄的概念,Perl脚本通过Perl文件句柄连接到外部世界。当Perl脚本开始执行时,默认地打开3个Perl文件句柄:STDIN,STDOUT和STDERR。

Perl文件句柄

Perl脚本通过间接Perl文件句柄连接到外部世界。从间接Perl文件句柄读就导入外部数据,向间接Perl文件句柄写则导出数据。根据间接Perl文件句柄的创建方式,可能连向:

磁盘文件。
硬件设备,例如打印机等。
本地进程,例如窗口系统中的一个命令行窗口。
远程进程,例如一个网络服务器。
"位存储桶"设备,也就是Unix/Linux系统中的/dev/null,该设备仅是吸引数据并忽略它。
间接Perl文件句柄可以是任何有效的Perl标识符,由大小写字母、数字和下划线字符组成。不同于其他变量的是,间接Perl文件句柄没有标志性的前缀(像"$","@","%")。因此,为了使间接Perl文件句柄有所区别,Perl程序员经常以全部大写字母表示它们。

当Perl脚本开始执行时,默认地打开3个间接Perl文件句柄:STDIN,STDOUT和STDERR。STDOUT间接Perl文件句柄(即"standardoutput")标准输出,是默认的输出间接Perl文件句柄。发送给这个间接Perl文件句柄的数据在用户指定的输出设备上显示,通常是脚本开始运行的命令行窗口。STDIN(即"standardinput")标准输入,是默认的输入间接Perl文件句柄。从这个间接Perl文件句柄读取的数据取自用户选择的输入设备,通常是键盘。STDERR(即"standarderror")标准错误输出,用于错误信息、诊断、调试和其他类似的偶发输出,默认情况下,STDERR和STDOUT使用相同的输出设备,但是用户可以自行改变。

正常输出和不正常输出有不同的独立间接Perl文件句柄,这样用户就能够独立地转移它们;例如,将正常输出发送到文件而将错误输出发送到屏幕。

  1. #!/usr/bin/perl-w  
  2. chomp($input=<>);  
  3. print"IfIheardyoucorrectly,yousaid:$input\n";  
  4.  

 

STDERR是warn()函数和die()函数的默认目标。用户在开始执行脚本之前可以改变三个标准间接Perl文件句柄的连接。在Unix/Linux和Windows系统上,使用重定向元字符"<"和">"来完成这种改变。例如,对一个名为change.pl的脚本执行这两条重定向命令,将改变该脚本的标准输入,使其从文件data.txt中读取数据,并改变标准输出,使处理过的数据输出到文件changed.txt中:

#perlchange.pl<data.txt>changed.txt

标准错误不改变,因此诊断信息(例如,从内置的warn()函数和die()函数返回的信息)在屏幕上显示。

间接Perl文件句柄

间接间接Perl文件句柄可以使名字空间的管理更简单。由于间接Perl文件句柄对于当前包是全局
的,两个函数试图同时打开"INFILE"会导致冲突。如果两个函数使用间接文
件句柄比如"my$infile",则不会发生冲突,也不用担心以后会发生冲突。

"open"的***个参数可以是一个间接Perl文件句柄的引用。在Perl5.6.0中,如果
参数没有初始化,Perl会自动创建一个间接Perl文件句柄,然后存储在***个参数中,
例如:

  1. open(my$in,$infile)ordie"Couldn'tread$infile:$!";  
  2. while(<$in>){  
  3. #dosomethingwith$_  
  4. }  
  5. close$in;  
  6.  

 还有一个方便之处是当运行到作用域外或者使用undefine时,Perl文件句柄会
自动关闭。

subfirstline{
open(my$in,shift)&&returnscalar<$in>;
#noclose()required

【编辑推荐】

  1. 解析四大Perl操作符用法
  2. Perl语言中的“指针”用法解析
  3. Perl二维数组用法全程剖析
  4. 学习笔记 深入剖析Perl线程的生命周期
  5. Perl多线程的两种实现方式
 

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-15 17:50:47

Perl模式

2010-07-28 15:21:01

Flex函数

2010-07-13 10:21:19

2010-07-19 16:56:56

Perl线程

2010-07-26 16:54:15

Perl引用

2010-07-13 09:02:16

Perl

2010-07-20 09:05:08

Perl类

2010-09-26 17:04:48

JVMJava虚拟机

2010-07-20 16:25:50

Perl正则表达式

2010-07-15 15:47:46

Perl守护进程

2010-07-16 17:12:58

Perl析构函数

2010-07-14 11:27:42

Perl多进程

2010-07-13 09:58:51

Perl关联数组

2010-06-07 13:02:46

Hadoop简介

2010-08-05 14:51:36

AdobeFlex

2010-09-17 09:19:08

Java API

2010-08-10 10:32:02

Flex语言

2010-07-27 08:59:19

FlexBuilder

2010-06-10 18:27:00

UML语言

2010-06-11 18:27:39

UML对象图
点赞
收藏

51CTO技术栈公众号