如果我写一个真正的引用\*STDOUT而不是类似的类型,我会得到什么*STDOUT?
一个是typeglob,另一个是对它的引用.
据我所知,主要的实际区别在于你不能将一个typeglob祝福成一个对象,但你可以祝福typeglob引用(这是做什么的IO::Handle)
在"Perl Cookbook",Recipe 7.16中详细讨论了这种区别."在变量中存储文件句柄".
另一个区别是,分配一个glob会为ENTIRE glob创建一个别名,而分配一个glob引用会产生预期的(如下所述perldoc perlmod, "Symbol Tables" section.
@STDOUT=(5);
$globcopy1 = *STDOUT; # globcopy1 is aliased to the entire STDOUT glob,
# including alias to array @STDOUT
$globcopy2 = \*STDOUT; # globcopy2 merely stores a reference to a glob,
# and doesn't have anything to do with @STDOUT
print $globcopy1 "TEST print to globcopy1/STDOUT as filehandle\n";
print "TEST print of globcopy1/STDOUT as array: $globcopy1->[0]\n\n";
print $globcopy2 "TEST print to globcopy2/STDOUT as filehandle\n";
print "TEST print of globcopy2/STDOUT as array: $globcopy2->[0]\n\n";
Run Code Online (Sandbox Code Playgroud)
生产:
TEST print to globcopy1/STDOUT as filehandle
TEST print of globcopy1/STDOUT as array: 5
TEST print to globcopy2/STDOUT as filehandle
Not an ARRAY reference at line 8.
Run Code Online (Sandbox Code Playgroud)
作为旁注,有关typeglob引用是将文件句柄传递给函数的唯一方法的谣言不是这样的:
sub pfh { my $fh = $_[0]; print $fh $_[1]; }
pfh(*STDOUT, "t1\n");
pfh(\*STDOUT, "t2\n");
# Output:
# t1
# t2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |