推荐答案
测试一下
题目
8<STDIN> 在列表 Context中
参考答案与知识点
参考答案
在Unix或者类似的系统中 ,包括 linux, Mac OS X ,通常可以输入 CTRL + D◆来表明输入已经结束 。Perl会忽略这个字符 ,
因此它将在屏幕上显示出来 。在DOS/WINDOWS 系统中,使用 CTRL + Z◆。如果你的实际情况和上述不同 ,查看你系统
的文档或者询问你附近的专家 。
Perl语言入门 (第四版 )
blei@163.com 51/201 9/21/2006◆这仅仅是默认值 ,可以使用 stty来改变它 。但通常是使用它 ;我们还没有看见某台 Unix系统不是使用 CTRL+D 来表明 end-of-file的。
◆在Perl的某些 DOS/WINDOWS 版本中可能存在 bug,在第一行中使入 CTRL+Z 可能存在问题 。在这样的系统中 ,可以使用在输入的结
束处加上 “\n”来解决。
如果某人运行一个程序 ,输入了三行 ,并且使用了恰当的 end-of-file,那其数组将含有 3个元素。每一个元素为一个由换行
符结束的字符串 ,对应于由 3个换行符结束的输入 。
如果在输入时 ,能一次去掉 (chomp )所有的换行符 ,岂不是很好 ?如果将 chomp应用于一个包含字符串的数组中 ,他将把这
个数组中每一个元素的换行符去掉 ,如下例所示 :
@lines = <STDIN>; # 读入所有的行
chomp = (@lines); # 去掉所有的换行符
但更常见的做法是 :
chomp (@lines = <STDIN>); # 读入所有的行 ,不包括换行符
当写你自己的程序时 ,可以采用任意种方法 ,大多数 Perl程序员使用第二种 ,更加紧凑些 。
你可能已经意识到这些输入一旦读过 ,就不能重新读了 ◆。到了文件的结尾 ,就没有更多的数据可以读入 。
◆如果是从某个源 (source,如文件,译者注)输入,那你可以返回去重新读一次 。但这不是这里讨论的问题 。
当输入的文件为一个 400MB的log文件时,将发生怎样的情况 ?行输入操作符读入所有的行 ,这将占去大量的内存 ◆。Perl
不会限制你那样做 ,但你系统的用户 (更别提系统管理员 )将很可能阻止你 。当输入的内容特别大时 ,应当避免一次将所
有的内容都读入内存 。
◆一般,实际占去的内存要比文件要大 。也就是说 ,一个400MB的文件读入数组时将至少占去 1G的内存空间 。这是因为 Perl为了节约时
间而浪费了些内存 。这是一个好的交易 。如果内存不够 ,可以去买一些 ;但时间不够 ,那就很难办了 。