:Perl進程與外界之間的IO聯繫的名稱。 shell
在Perl5.6以前,全部文件句柄名稱都是裸子,以後能夠把文件句柄的引用放在常規變量中。 數組
6個特殊文件句柄名是Perl保留的,STDIN、STDOUT、STDERR、DATA、ARGV、ARGVUT。 this
用戶能夠在shell裏運行如下命令: 編碼
$./my_program <dino >wilma; #告訴shell,程序的輸入應該來自dino,輸出應該送到wilma文件。
三種perl默認文件句柄---STDIN、STDOUT、STDERR,是產生Perl進程的父進程自動打開的文件或設備。 spa
open Filehandler,filename; code
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;
:一、使用\*; class
#!/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;
二、使用變量
#!/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;