通常,作为filehanle或包含文件句柄的变量,赤字可能是<>操作符中用于引用文件的位置,但不是--从typeglob提取的文件句柄,如下面最后一行所示。为什么它不能工作,因为最后一个案例也引用了一个文件句柄?
open FILE, 'file.txt';
my $myfile = *FILE{IO};
print <$myfile>;
print <*FILE{IO}>; # this line doesn't work.发布于 2015-01-29 07:31:57
在佩洛普中,它说:
如果尖括号中的内容既不是文件句柄,也不是包含文件句柄名称、类型globbed或类型globbed引用的简单标量变量,则将其解释为要被全局化的文件名模式。
既然我们想说出这样的话:
foreach (<*.c>) {
# Do something for each file that matches *.c
}perl不可能将“*”解释为一种类型词。
正如在另一个答案中所指出的,您可以使用readline来解决这个问题,或者您可以首先将类型shows分配给标量(如您的示例所示)。
发布于 2015-01-29 07:18:24
<>是readline()的快捷方式之一,它接受简单的标量或裸露的单词,即。<FILE>。对于更复杂的表达式,您必须更加明确,
print readline *FILE{IO};否则它将被解释为glob()
perl -MO=Deparse -e 'print <*FILE{IO}>;'
use File::Glob ();
print glob('*FILE{IO}');https://stackoverflow.com/questions/28208970
复制相似问题