James Edward Gray II wrote:
> On Jan 2, 2004, at 10:10 AM, Paul Kraus wrote:
>
>>> Don't do that. The foreach reads the whole file into memory and
>>> then walks it line by line. If we just want one at a time, let's
>>> fetch them that way
>>
>> I don't agree with this.
>
> And I don't understand this. ;)
>
>> If you are working with a file that is as small as
>> the one included seems to be easier to just load up some data
>> structures. I understand writing efficient code is always best but
>> for a quickie script like this I wouldn't be to concerned with the
>> 1/100th of a ms that your going to shave off but not dumping the
>> contents to memory.
>
> If you're going to work with the lines one at a time anyway, what
> exactly is the advantage of using the probably slower and definitely
> more memory wasteful foreach()?
While the foreach is certainly more wasteful, why in the world would you
re-initialize and re-open the file multiple times? Why not just open the
file once and iterate over the file, comparing each line of the file to
each of the keys in the %input hash?
# Original
#foreach $gene (sort keys %genedex) {
# while ($line=<DATA>) {
# My idea
while (defined(my $line = <DATA>)) {
foreach my $gene (sort keys %genedex) {
if ($line =~ /$gene/) {
($probe_id) = split(/\s/,$line,2);
print "$gene\t$probe_id\t$genedex{$gene}\n";
}
}
}
I'm sure there are other ways to improve on this idea, but right off the
bat I can't see justifying repeatedly heading back to disk to
re-open/rewind the file...
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>