Perl 为什么在逐行阅读时${fh}的行为与$fh不同?
此脚本:Perl 为什么在逐行阅读时${fh}的行为与$fh不同?,perl,Perl,此脚本: #!/usr/bin/perl use strict; use warnings; my ${fh}; open($fh, '<', "some_file.txt") or die "fail\n"; while(my $line = <${fh}> ) { print $line; } close $fh; 为什么这是输出 如果我将更改为,它将按预期逐行打印一些文件.txt。我认为大括号可以用来分隔变量名,my${var}将与my$var相同 在变量
#!/usr/bin/perl
use strict;
use warnings;
my ${fh};
open($fh, '<', "some_file.txt") or die "fail\n";
while(my $line = <${fh}> ) {
print $line;
}
close $fh;
为什么这是输出
如果我将
更改为
,它将按预期逐行打印一些文件.txt
。我认为大括号可以用来分隔变量名,my${var}
将与my$var
相同
在变量名周围添加{}
会导致问题吗
我在Red Hat和Cygwin Perl 5.14上试用了Perl 5.8.8。中的
部分:
如果尖括号中包含的是一个简单的标量变量(例如,$foo
),则该变量包含要从中输入的文件句柄的名称或其typeglob,或对该文件句柄的引用。例如:
$fh = \*STDIN;
$line = <$fh>;
表示读线(ARGV)
表示读线(标识符)
表示readline($IDENTIFIER)
(任何其他)表示glob(qq)
表示读线($fh)
表示
,与glob(qq)
相同glob($fh”)
在这种情况下,文件句柄的字符串化是
GLOB(0x5BC2A0)
。这是传递给glob的,但是这些字符中没有一个对glob
有特殊意义,因此glob
只是返回该字符串。有很多情况下,添加{}
会更改解析,例如,“$foobar”
与“${foo}bar”
“$foo::bar”与“$code>”相比,“$foo's bar”
vs.“${foo}s bar”
,“$foo[0]”
vs.“${foo}[0]”
。但我猜你是在问除了字符串插值以外的情况吗?@ThisSuitesBlack不是你猜对的。答案也很好!所以基本上
是在完全的字符级别定义的。。。哇,CS不及格@卡兹,你从哪儿弄来的?我的帖子用记号来定义它。即使它确实使用了一种子语言(比如m//
,tr//
,sprintf
和glob
do),我也不明白为什么这会让你的内裤打结。在另一个答案中,我注意到(引用自文档),在这个答案中,甚至
也与
@Kaz完全不同。那又怎么样?你为什么这么说?@nwellnhof,你似乎只读了我一半的句子,因为我明确地说,这不是你穿内裤的理由,因为这种事经常发生/$x/
与/$x/
不同<代码>“$x”
与“$x”
不同。等
$fh = \*STDIN;
$line = <$fh>;