我遇到了两种不同的语法来读取来自STDIN的输入,我不知道两者之间是否有区别。
我被介绍的第一个方法是:
$IN = Bio::SeqIO->new(-fh => *STDIN{IO}, '-format' => 'fasta', '-alphabet' => $moltype);后来,在问了一些关于BioPerl IRC的问题后,我被告知要这样写:
$IN = Bio::SeqIO->new(-fh => \*STDIN, '-format' => 'fasta', '-alphabet' => $moltype);发布于 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')对象。这是一个有方法等的完整的对象。所以我们可以
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参考)也可以工作,尽管它们是不同的类型。
https://stackoverflow.com/questions/22871742
复制相似问题