perl文件句柄


文件句柄

: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;#选择默认的输出句柄

用say来输出

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;





转载于:https://my.oschina.net/u/347414/blog/263280

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值