遗留的bareword文件句柄在全局范围内查找,它是否被解析为包变量?为什么不在前面加上标点符号($)?
open FILE, 'file.txt';发布于 2015-01-28 19:18:55
如果你查看perldoc -f ref,你会发现数据类型比识别符号更多。唯一定义的是
$ - SCALAR@ - ARRAY% - HASH& - CODE其余的由上下文标识。
如果你写
package Pack;
open FH, '<', 'file';然后,FH将作为IO变量Pack::FH出现在Pack符号表中。它前面没有美元$,因为它是IO变量,而不是标量。如果没有前面的package语句,它将被放在默认的main命名空间中。所以在你的例子中
open FILE, 'file.txt'然后,您可以使用完全限定的main::FILE读取FILE句柄,如下所示
while (<main::FILE>) {
:
:
}发布于 2015-01-28 19:19:57
以前是Perl中的约定- filehandles都是大写的,并且是全局作用域。
这是从STDIN (和其他标准文件流)开始的,因此您可以这样做:
while ( <STDIN> ) {
print;
}Perl的open命令支持“传统”模式的打开,即:
open ( FILEHANDLE, ">filename.txt" );我们不建议再使用它了,但是如果不破坏遗留代码,就不能删除它。
相反,你应该:
open ( my $filehandle, ">", 'filename.txt' ) or die $!;
print {$filehandle} "Some Text\n";这有两个优点:
输出你的文件句柄是词法作用域的,所以你不必担心模块会写到‘
https://stackoverflow.com/questions/28190118
复制相似问题