perl学习笔记-----------------------(7)

默认情况下,如果不指定文件句柄给print(或者printf,这里的内容对两者均适用),则默认会使用STDOUT。但这个默认属性,可以通过select 操作进行更改。如下:
select BEDROCK;
print “I hope Mr. Slate doesn’t find out about this.\n”;
print “Wilma!\n”;
一旦选择了(select)了某个文件句柄,则它将变成默认值。但这通常是一个坏主意,因为会扰乱程序的剩余部分,因此在完成时应当恢复以前的设置◆。默认情况,输出到文件句柄的内容会被缓存起来。将变量$|设置为1,将会在输出操作结束时会立刻清空文件句柄。

Perl 有两个内嵌的select 函数,均可在perlfunc 的帮助手册中找到。另一个select 函数有四参数,因此有时被称为“四参数的select”
select LOG;
$| = 1; #don’t keep LOG entries sitting in the buffer
select STDOUT;
#...time passes, babies learn to work, tectonic plates shift, and then … .
print LOG “This gets written to the LOG at once!\n”

如果系统的三个句柄STDIN, STDOUT, STDERR 重新打开时没有成功,Perl 会自动使用前一个。也就是说,只有Perl 成功的重新打开新的连接,否则是不会关闭以前的连接。至少,如果没有改变Perl 变量$^F,这是正确的。如果修改了,结果就不定了。

写一个程序,类似于cat,但保持输出的顺序关系。(某些系统的名字可能是tac。)如果运行此程序:./tac fred barneybetty, 输出将是文件betty 的内容,从最后一行到第一行,然后是barney, 最后是fred, 同样是从最后一行到第一行。(注意使用./确保调用的是你自己的程序,而非系统提供的)
#usr!/bin/-w perl
print reverse <>;

写一个程序,要求用户在不同的行中输入一些字符串,将此字符串打印出来,规则是:每一条占20 个字符宽度,右对齐。为了确保正确的输出,在开头打印出一串数字作为比较(帮助调试)。注意,不要犯19 个字符宽度的错误。例如,如果输入,hello, good-bye,则输出为:
#usr/bin/perl -w
print "Enter some lines,then press Ctrl-D:\n";
chomp(my @lines=<STDIN>);
print "123456789" x 7,"12345\n";
foreach(@lines)
{printf "%20s\n",$_;}
my $format="%20s\n"x @lines;
printf $format,@lines;

修改上一个程序,允许用户选择宽度,如,用户输入30,hello, good-bye(在不同的行中),则每一行的宽度为30。(提示:参阅第二章相应部分)。提示,如果选择的宽度太长,可以增加比较行的长度。
#usr!/bin/perl -w
print "what column width would you like?";
chomp(my $width=<STDIN>);
print "Enter some lines,then press Ctrl-D:\n";
chomp(my @lines=<STDIN>);
print "1234567890"x (($width+9)/10),"\n";
foreach(@lines){
printf "%${width}s\n",$_;
}

转载于:https://my.oschina.net/u/2291665/blog/885001

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值