首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl STDIN语法

Perl STDIN语法
EN

Stack Overflow用户
提问于 2014-04-04 19:42:49
回答 1查看 414关注 0票数 1

我遇到了两种不同的语法来读取来自STDIN的输入,我不知道两者之间是否有区别。

我被介绍的第一个方法是:

代码语言:javascript
复制
$IN = Bio::SeqIO->new(-fh => *STDIN{IO}, '-format' => 'fasta', '-alphabet' => $moltype);

后来,在问了一些关于BioPerl IRC的问题后,我被告知要这样写:

代码语言:javascript
复制
$IN = Bio::SeqIO->new(-fh => \*STDIN, '-format' => 'fasta', '-alphabet' => $moltype);
EN

回答 1

Stack Overflow用户

发布于 2014-04-04 19:57:43

就所有意图和目的而言,它们是等同的。您将更多地看到\*STDIN表单,而我更喜欢*STDIN{IO}

表单\*STDIN创建了对“typeglob”的引用。glob是Perl包符号表中的一个条目。每个glob包含各种类型的引用-- glob *foo有一个哈希%foo,它可以作为*foo{HASH}访问,在*foo{ARRAY}上有一个数组@foo,一个标量,一个格式,一个子例程,以及一个IO thingy:*foo{IO}。如果没有对应的变量,任何插槽都可能是未定义的。

“IO thingy”将是当前任何Perl上的->isa('IO::Handle')对象。这是一个有方法等的完整的对象。所以我们可以

代码语言:javascript
复制
my $fh = *STDOUT{IO};
$fh->say("foo"); # you may need to "use IO::File" to actually load the methods

但是,为了方便起见,STDOUT->say("foo") (裸字)和(\*STDOUT)->say("foo") (glob参考)也可以工作,尽管它们是不同的类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22871742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档