[Bioperl-l] get_nof_contigs returns undef
Wes Barris
wes.barris at csiro.au
Sun Oct 2 19:21:16 EDT 2005
Heikki Lehvaslaiho wrote:
> Ah, thanks, the extra square brackets do the trick!
>
> return scalar( @{[moose()]} );
>
> sub get_nof_contigs {
> my $self = shift;
> return scalar( @{[$self->get_contig_ids()]} );
> }
>
> Talk about clean syntax! ;-)
Yes, one might get a headache trying to figure out what that line is
doing.
I notice that this fix has not made it into the code yet. Should I
submit a bug report to get this fix pushed through?
>
> Seriously, I do agree with you that it is better to be wordy and clear than
> terse and hard to read.
>
> -Heikki
>
> On Sunday 25 September 2005 19:42, George Hartzell wrote:
>
>>Heikki Lehvaslaiho writes:
>> > So the question is how to force list context for a subroutine. This is
>> > something I've often wondered and have not found a clean solution.
>> > [...]
>>
>>No, [I think] that's not the problem here.
>>
>>The problem is that there's a call to sort() buried in the
>>get_nof_contigs return statement and sort is a Surprising function (it
>>returns undef when called in a scalar context).
>>
>><windmill-tilting>
>>The cleanest fix would be to petition the Perl community to change the
>>semantics of the sort() function so that it's not so Surprising.... ;)
>></windmill-tilting>
>>
>>In the meantime, I tend to avoid doing real work in a return
>>statement, I'd do the work w/in the body of the function, assign the
>>results to an array (e.g. @results), then return that.
>>
>>It looks a bit wordy and people think I'm paranoid, but it's just so
>>much easier for me to be safe than to try to remember whether Perl's
>>going to Do The Right Thing or just bite me in the ass....
>>
>>If you really want to force something into a list context, the second
>>paragraph of the documentation for scalar() says this:
>>
>> There is no equivalent operator to force an expression to be
>> interpolated in list context because in practice, this is never
>> needed. If you really wanted to do so, however, you could use
>> the construction "@{[ (some expression) ]}", but usually a sim-
>> ple "(some expression)" suffices.
>>
>>
>>g
>>
>>_______________________________________________
>>Bioperl-l mailing list
>>Bioperl-l at portal.open-bio.org
>>http://portal.open-bio.org/mailman/listinfo/bioperl-l
>
>
--
Wes Barris
E-Mail: Wes.Barris at csiro.au
More information about the Bioperl-l
mailing list