:Perl进程与外界之间的IO联系的名称。
在Perl5.6之前,所有文件句柄名称都是裸子,之后可以把文件句柄的引用放在常规变量中。
6个特殊文件句柄名是Perl保留的,STDIN、STDOUT、STDERR、DATA、ARGV、ARGVUT。
用户可以在shell里运行以下命令:
$./my_program <dino >wilma; #告诉shell,程序的输入应该来自dino,输出应该送到wilma文件。
三种perl默认文件句柄---STDIN、STDOUT、STDERR,是产生Perl进程的父进程自动打开的文件或设备。
open Filehandler,filename;
open CONFIG,'dino';#打开已存在的dino文件,文件中的任何内容都可以读到我们的程序中 open CONFIG,'<dino';#用小于号声明该文件只是用来读入,而非写入 open BEDROCK,‘>fred’;#大于号,打开文件句柄,并输出到新文件fred中,如果已存在fred,则清除原内容并以新内容取代之; open LOG,'>>logfile';#双大于号,打开文件,如果文件原本就存在,那么新数据会添加在原有内容后面,如果不存在,会创建一个新文件。 open CONFIG,'<','dino'; open BEDROCK,'>',$file_name; open LOG,'>>','logfile'; open CONFIG,'<:encoding(UTF-8)','dino';##open CONFIG,'<:utf8','dino';
简写方式不会考虑输入或输出的数据是否真的就是合法的UTF-8字符串,如果是encoding(UTF-8),会确认编码是否正确。
%perl -MEncode -le "print for Encode->encodings(':all')"#打印出所有Perl能理解和处理的字符编码;
print LOG “Captain‘s log,stardate 3.14159\n”; printf STDEER "%d percent complete.\n",$done/$total*100; printf (STDEER "%d percent complete.\n",$done/$total*100); printf STDEER ("%d percent complete.\n",$done/$total*100);
select BEDROCK;#改变输出用的默认文件句柄 print “i hope Mr.Slate doesn't find out about this.\n”; select STDOUT;#选择默认的输出句柄
Perl5.10开始可以使用say,在打印每行内容时会自动加上换行符。
use 5.010; say “Hello!”;#等价于print “Hello!\n”; say BEDROCK "hello!";#为say指定一个文件句柄 $name = 'fred' say $name; #等价于print $name,"\n"; my @array = qw {a b c d}; say @array; #打印abcd\n say "@array"#打印a b c d\n
my $rocks_fh; open $rocks_fh,'<','rocks.txt' or die "Could not open rocks.txt:$!"; while(<rocks_fh>){ chomp; .... } close $rocks_fh;
:1、使用\*;
#!/usr/bin/perl use strict; sub openfile() { my $path=shift;#把数组的第一个值移出并返回它,然后把数组长度减一并把所有的东西都顺移 open(FILE,"$path") or die "Can't open $path $!\n "; return \*FILE; } my $temp=&openfile("config"); my @file=<$temp>; print @file;
2、使用变量
#!/usr/bin/perl use strict; sub openfile() { my $file; my $path=shift; open($file,"$path") or die "Can't open $path $!\n "; #close($file); return $file; } my $temp=&openfile("config"); my @file=<$temp>; print @file;