Perl learning log 0709

输入与输出

标准输入

<STDIN>为行输入操作符,在标量context中返回标准输入下一行。

while (<STDIN>){
    print "I saw $_";
}

note:这个简写只在while循环里中适用,如果把行输入操作符放在其他任何地方,特别是单独成行时,他不会读取一行输入并存到$_中。

foreach (<STDIN>){
    print "I saw $_";
}

如果在列表context中调用行输入操作符,它会返回一个列表,其中包含剩余的所有输入内容,每行内容成为列表的一个元素。
foreach中,默认的控制变量是$_,所以读取的数据放到这里面。

钻石输入符

钻石操作符是行输入操作符的特例。不过它并不是从键盘取得输入,而是从用户指定的位置读取:

while (defined($line = <>)){
    chomp($line);
    print "It was $line that I saw!\n";
}

perl input.pl fred 输出“It was [从文件fred读取一行]that I saw”直到文件结尾。

while (<>)){
    chomp();
    print "It was $_ that I saw!\n";
}

使用chomp而不加参数时,会直接作用在$_上。
perl v5.22及后续版本,一般用<<>>

输出到标准输出

print会读取它后面参数列表中所有元素,并把每一项依次送到标准输出。
print <>;相当于cat命令
print sort <>;相当于sort命令

printf格式化输出

my @items = qw( wilma dino pebbles);
my $format = "The items are:\n".("%10s\n" x @items);
printf $format,@items
# 简化为:
printf "the items are:\n".("%10s\n" x @items), @items;

在标量上下文中用了一次@items以取得它的长度,然后又在列表上下文中用了一次以取得它的内同。

文件句柄

打开文件句柄

Larry建议使用全大写字母来命名文件句柄,以避免混淆。
有6个文件句柄是Perl保留的。STDIN, STDOUT, STDERR, DATA, ARGV, ARGVOUT
用户可以在shell里运行一下命令:
./my_program<dino >wilma这条命令告诉shell,文件的输入应来自文件dino,输出应送到文件wilama

open CONFIG, 'dino';
open CONFIG,'<dino';
open BEDROCK,'>fred';
open LOG, '>>logfile';

第一行打开名为config的文件句柄,让他指向文件dino。它会打开dino文件,文件中的任何内容都能从文件句柄CONFIG被读到我们的程序中来。这和利用shell的重定向将文件经STDIN读入程序的做法类似。第二行和第一行所做的事完全相同。
第三行将可以用来创建一个新的文件:它会打开文件句柄BEDROCK并输出到新文件。如果已经存在该文件,那么久清除原有的内容并以新内容取代之。
第四行,若不存在创建新文件,若存在,新数据会添加在原有文件后面。

关闭文件句柄

closeclose BEDROCK

用die处理致命错误

die函数可以中止运行并给出错误信息。

if(! open LOG, '>>','logfile'){
    die "Cannot create logfile: $!";
}

$!是perl的特殊变量,保存着最后一刻的系统错误信息。
warn函数可以发出类似Perl的内置警告信息,区别在于它不会终止程序运行。
Perl v5.10后,autodie编译指令会在open失败时自动启动die

使用文件句柄

if (! open PASSWD, "/etc/passwd"){
    die "How did you get logged in? ($!)";
}
while(<PASSWD>){
    chomp;
    ...
    }

select可改变默认的输出文件句柄。

selelct BEDROCK
print "I hope Mr. slate does't find out about this.\n";
print "Wilam!\n";
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值