遗留裸字文件句柄在全局范围内查找,它是否被解析为包变量?为什么它没有添加标点符号($
)?
open FILE, 'file.txt';
答案 0 :(得分:3)
如果查看perldoc -f ref
,您会发现数据类型多于识别符号。唯一定义的是
$
- SCALAR @
- ARRAY %
- HASH &
- 代码 其余部分由上下文确定。
如果你写
package Pack;
open FH, '<', 'file';
然后FH
在Pack
符号表中显示为 IO 变量Pack::FH
。它之前没有$
美元,因为它是 IO 变量,而不是 SCALAR 。如果没有前面的package
语句,它将被放置在默认的main
命名空间中。所以用你的例子
open FILE, 'file.txt'
然后您可以使用完全限定的FILE
这样的main::FILE
句柄阅读
while (<main::FILE>) {
:
:
}
答案 1 :(得分:0)
以前是Perl中的约定 - 文件句柄都是大写的,全局范围的。
这开始于STDIN
(和其他标准文件流),所以你可以这样做:
while ( <STDIN> ) {
print;
}
Perl的开放式命令支持传统&#39;开放模式,即:
open ( FILEHANDLE, ">filename.txt" );
不建议再使用它,但不能在不破坏遗留代码的情况下将其删除。
相反,你应该:
open ( my $filehandle, ">", 'filename.txt' ) or die $!;
print {$filehandle} "Some Text\n";
这有两个好处: