为什么我必须在Perl裸字文件句柄前使用*?

时间:2010-02-11 07:04:49

标签: perl operators

尝试这样做时:

 my $obj = new JavaScript::Minifier;
 $obj->minify(*STDIN, *STDOUT);
// modified above line to
 $obj->minify(*IP_HANDLE,*OP_HANDLE)

如果IP_HANDLE和OP_HANDLE是文件句柄,则上述方法有效,但我仍然无法弄清楚*在应用于文件句柄或任何其他数据类型时的实际作用。

谢谢,

3 个答案:

答案 0 :(得分:25)

答案 1 :(得分:7)

*引用Perl "typeglob",这是Perl的一个模糊的实现细节。一些较旧的Perl代码需要使用typeglobs引用文件句柄(因为当时没有任何其他方法可以执行此操作)。更现代的代码可以使用文件句柄引用,这样更容易使用。

*类似于$%,它指的是同名的不同类型的对象。

来自perldata文档页面:

  

Perl使用名为typeglob的内部类型来保存整个符号表条目。 typeglob的类型前缀是*,因为它代表所有类型。这曾经是通过引用将数组和哈希值传递给函数的首选方法,但现在我们有了真正的引用,这很少需要。

答案 2 :(得分:2)

这是全球的印记。 *FOO指的是名为“FOO”的glob,就像$FOO指的是名为“FOO”的标量,依此类推。 Globs通常是代码引用或文件句柄。

您需要存在的sigil才能修改glob值,例如*name_of_sub = sub{};,或者在不调用特殊语法的情况下获取其值,例如调用sub。