那么<file>究竟做了什么?</file>

时间:2014-06-10 13:45:31

标签: perl

所以,我已多次使用<FILE>。一个简单的例子是:

open (FILE, '<', "someFile.txt");
while (my $line = <FILE>){
print $line;
} 

所以,我曾经以为使用<FILE>会一次占用一个文件的一部分(具体是一行)并使用它,当它再次被调用时,它将转到下一行。事实上,每当我将<FILE>设置为标量时,这就是它的功能。但是,当我告诉计算机这样的一行时:

print <FILE>;

它打印了整个文件,换行符和所有文件。所以我的问题是,当计算机完全通过<FILE>时会想到什么?

3 个答案:

答案 0 :(得分:12)

用于从文件中读取的Diamond运算符<>实际上是内置的readline函数。

来自perldoc -f readline

  

从其文件句柄中读取,其类型包含在EXPR中(如果未提供EXPR,则来自* ARGV)。在标量上下文中,每次调用都会读取并返回下一行,直到到达文件结尾,随后的调用将返回undef。在列表上下文中,读取直到达到文件结尾并返回行列表。

如果您想检查perl中的特定上下文,

sub context { return wantarray ? "LIST" : "SCALAR" }

print my $line  = context(), "\n";
print my @array = context(), "\n";
print context(), "\n";

输出

SCALAR
LIST
LIST

答案 1 :(得分:7)

这取决于它是在标量上下文还是列表上下文中使用。

在标量上下文中:my $line = <file>它在一个平局处读取一行 在列表上下文中:my @lines = <FILE>它读取整个文件。

当你说print <FILE>;它是列表上下文时。

答案 2 :(得分:2)

根据评估的上下文,行为会有所不同:

my $scalar = <FILE>; # Read one line from FILE into $scalar
my @array = <FILE>; # Read all lines from FILE into @array

print采用list参数时,<FILE>在列表上下文中进行计算,并以后一种方式运行。