2012年7月1日星期日

Re: [PerlChina] 如何选择子例程返回值?

非常感谢!

On 2012-7-1 23:16, Robin Lee wrote:
要自己实现上下文相关的函数,就是靠 perldoc -f wantarray


Perl 的函数实际上是无法返回 hash 值的,只能返回 scalar 和 list 。
return %hash;
实际上是
my @list = %hash;
return @list;

所以,不要写返回 hash 的函数,要返回 hash 总是使用 reference。

2012/7/1 De-Jian Zhao <dejian.zhao@gmail.com>
各位好,请教一个问题。最近写了一个subroutine,尝试了两种方法,主要区别是 子例程的返回值不同。一个是返回hash reference(方法1),一个是直接返回 hash(方法2)。在运行时感觉方法2会稍有停顿。因此,想问一个问题:方法2 中%fasseq在接收子 例程的返回值时是不是要复制一份结果,并不是直接操作子例 程中的那块内存地址?方法1中my %fasseq = %$fasseq;是不是直接把地址传 给%fasseq进行操作?应当如何设置这个返回值?

还有一个问题是:Perl自带的函数根据上下文的不同可以返回scalar或者list,自 己写子例程时如何实现?


方法1:
sub read_fasta_into_hash() {
    my $fasfile = shift @_;
    my %fasseq;
    .....
    return \%fasseq;
}
my $fasseq = &read_fasta_into_hash($fasfile);
my %fasseq = %$fasseq;


方法2:
sub read_fasta_into_hash() {
    my $fasfile = shift @_;
    my %fasseq;
    .....
    return %fasseq;
}
my %fasseq = &read_fasta_into_hash($fasfile);

没有评论: