[Bioperl-l] commandexts and array refs bug - found problem, not sure of best fix
Chris Fields
cjfields at illinois.edu
Thu Jun 10 13:04:08 EDT 2010
On Jun 10, 2010, at 11:46 AM, Ben Bimber wrote:
> i suspect this piece of code is seldom encountered. if any existing
> bioperl wrapper actually tried to pass an arrayref to commandexts, it
> would hit this same error. i only encountered this using samtools
> merge.
>
> I looked a little more into exactly what @switch is doing. it seems
> to allow you to supply switches specific to a given file. the bowtie
> wrapper uses it with paired end data (the first fasta gets a -1 and
> and second gets a -2). however, i dont see anywhere where this
> actually applies in a multi-file situation. nonetheless, reversing
> the order of the two existing splice() (lines 991-992) I think will
> preserve whatever functionality was there and prevent the error:
>
> my @files = @args{@specs};
> # expand arrayrefs
> my $l = $#files;
> for (0..$l) {
> if (ref($files[$_]) eq 'ARRAY') {
> splice(@switches, $_, 1, ($switches[$_]) x @{$files[$_]});
> splice(@files, $_, 1, @{$files[$_]});
> }
> }
>
> As I write this email and look at the code above a little more, I
> think that the current approach used to expand these arrayrefs will
> also break down in other situations, including when the arrayref is
> not in the last element of the @files array or when 2 arrayrefs are
> passed. However, it seems that this is barely used and it really
> depends how much time/thought you want to put into it.
>
> -Ben
It's worth documenting this concern in the code as a comment, particularly if the situation does pop up at some point.
Do you want to send a patch in? Or just want us to make the switch in the code directly?
chris
More information about the Bioperl-l
mailing list