Laz*_*zer 11 perl file diamond-operator
码
$ cat test1
hello
i am
lazer
nananana
$ cat 1.pl
use strict;
use warnings;
my @fh;
open $fh[0], '<', 'test1', or die $!;
my @res1 = <$fh[0]>; # Way1: why does this not work as expected?
print @res1."\n";
my $fh2 = $fh[0];
my @res2 = <$fh2>; # Way2: this works!
print @res2."\n";
Run Code Online (Sandbox Code Playgroud)
跑
$ perl 1.pl
1
5
$
Run Code Online (Sandbox Code Playgroud)
我不确定为什么Way1
不按预期工作Way2
.这两种方法不一样吗?这里发生了什么?
比bareword(解释为文件句柄)或简单标量更复杂的东西$var
被解释为glob()
函数的参数.只有裸字和简单标量被视为文件句柄,由<...>
操作员迭代.
基本上规则是:
<bareword> ~~ readline bareword
<$scalar> ~~ readline $scalar
<$array[0]> ~~ glob "$array[0]"
<anything else> ~~ glob ...
Run Code Online (Sandbox Code Playgroud)
这是因为<$fh[0]>
被解析为glob($fh[0])
.
readline
改为使用:
my @res1 = readline($fh[0]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1249 次 |
最近记录: |