通常bareword作为filehanle或变量保存文件句柄可以放在<>
运算符中以引用文件,但是 NOT 从typeglob中提取的文件句柄如下面的最后一行所示。为什么它不起作用,因为最后一个案例也引用了文件句柄?
open FILE, 'file.txt';
my $myfile = *FILE{IO};
print <$myfile>;
print <*FILE{IO}>; # this line doesn't work.
答案 0 :(得分:6)
<>
是readline()
的快捷方式之一,它接受简单的标量或单词,即。 <FILE>
。对于更复杂的表达式,您必须更明确,
print readline *FILE{IO};
否则将被解释为glob()
perl -MO=Deparse -e 'print <*FILE{IO}>;'
use File::Glob ();
print glob('*FILE{IO}');
答案 1 :(得分:3)
在perlop中,它说:
如果尖括号内的内容既不是文件句柄也不是文件句柄 包含文件句柄名称,typeglob或的简单标量变量 typeglob引用,它被解释为文件名模式 全球...
因为我们希望能够说出这样的话:
foreach (<*.c>) {
# Do something for each file that matches *.c
}
perl不可能将'*'解释为typeglob。
如另一个答案中所述,您可以使用readline解决此问题,或者您可以先将typeglob指定给标量(如您的示例所示)。