[Bioperl-l] Bio::Root::IO _readline/_pushback behavior

Hilmar Lapp hlapp at drycafe.net
Thu Aug 4 21:31:52 UTC 2011


I agree. In fact I'm surprised that $io->_pushback() does not act like  
unshift() - that's I thought how it is used.

	-hilmar

On Aug 3, 2011, at 10:16 AM, Chris Fields wrote:

> On Aug 3, 2011, at 3:55 AM, Kai Blin wrote:
>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Hi folks,
>>
>> as I mentioned on https://redmine.open-bio.org/issues/3264 there is
>> something odd going on with Bio::Root::IO's _readline/_pushback
>> functions. This seems to be intentional, at least there is a test  
>> case
>> asserting the behaviour I'm seeing. It his however very confusing  
>> to the
>> unexpecting programmer using the code.
>>
>> One assumption I'd immediately make would be that if I have code that
>> does a $foo = $io->_readline; $io->_pushback($foo); $bar =
>> $io->_readline;, $foo will be the same string as $bar, regardless  
>> what
>> other pieces of the code did. Currently, this is not the case,  
>> because
>> the readbuffer that _pushback pushes back into has new strings  
>> appended
>> to the end but readline removes them from the front.
>
> I think this test is performed in the regressions already, but if  
> not then it is more than welcome.
>
>> This easily violates the "principle of least surprise", so I think we
>> should change the readbuffer to a stack. As far as I can tell,  
>> changing
>> the _pushback function to "unshift" instead of "push" to the  
>> readbuffer
>> breaks only the Root/RootIO.t test designed to test the old  
>> behaviour. I
>> don't see any other tests failing on my system that don't fail  
>> without
>> this patch.
>>
>> Any comments from the core devs?
>
> I don't have a problem with that beyond the change to the RootIO.t  
> tests (it implies a specific behavior that some developers expect,  
> so is a very subtle API change).  However, this is how one would  
> expect it, to be more like an 'unread' stack instead of a queue.  In  
> fact, there is a module I used for Biome's pushback/readline called  
> IO::Unread that implements an IO layer for mimicing this behavior,  
> might be worth looking into.
>
>> Cheers,
>> Kai
>
> chris
>
>
> Christopher Fields
> Senior Research Scientist
> National Center for Supercomputing Applications
> Institute for Genomic Biology
> University of Illinois Urbana-Champaign
> 1206 W. Gregory Dr. , MC-195
> Urbana, IL 61801
>
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l

-- 
===========================================================
: Hilmar Lapp -:- Durham, NC -:- hlapp at drycafe dot net :
===========================================================







More information about the Bioperl-l mailing list