所以,我已多次使用<FILE>
。一个简单的例子是:
open (FILE, '<', "someFile.txt");
while (my $line = <FILE>){
print $line;
}
所以,我曾经以为使用<FILE>
会一次占用一个文件的一部分(具体是一行)并使用它,当它再次被调用时,它将转到下一行。事实上,每当我将<FILE>
设置为标量时,这就是它的功能。但是,当我告诉计算机这样的一行时:
print <FILE>;
它打印了整个文件,换行符和所有文件。所以我的问题是,当计算机完全通过<FILE>
时会想到什么?
答案 0 :(得分:12)
用于从文件中读取的Diamond运算符<>
实际上是内置的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>
在列表上下文中进行计算,并以后一种方式运行。