From: Rob Dixon <[EMAIL PROTECTED]>
> oldgeezer wrote:
> > foreach my $entry (uniq @IK){
> >   foreach my $line(@DATA) {
> >     # Note /;$entry;/ takes longer than
> >     # /$entry;/ and that takes longer than /$entry/
> >     # But /$entry/ also splits remarks_entries.
> >     # So I need the trailing ';' because they
> >     # are not in the remarks_entries
> >     # Appending the i, like: /$entry/i slows
> >     # down too. I don't need it.
> >     # Prepending m, like m/$entry/
> >     # does not change anything (timewise).
> >     # For the average person /$entry;/ is fastest
> >     if($line=~ /$entry;/) {
> >      splitline($line); [EMAIL PROTECTED] changes when I splitline
> >      #next; don't do this. It makes it slower
> >     };
> >   };
> > };
> 
> Your comments are fine, but they have obscured your code structure. How about
> 
> # Note /;$entry;/ takes longer than /$entry;/ and that takes
> # longer than /$entry/ But /$entry/ also splits
> # remarks_entries. So I need the trailing ';' because they
> # are not in the remarks_entries.
> #
> # Appending the i, like: /$entry/i slows down too. I don't
> # need it. Prepending m, like m/$entry/ does not change
> # anything (timewise). For the average person /$entry;/ is
> # fastest
> #
> foreach my $entry (uniq @IK) {
> 
>   foreach my $line (@DATA) {
> 
>     if ($line=~ /$entry;/) {
> 
>       splitline($line);  # @IK changes when I splitline
>       #next; don't do this. It makes it slower
>     }
>   }
> }
> 
> But even then I have issues with what your comments say. First of all you are
> obsessed with speed over function. A programmer's primary duty is to make 
> things
> that work, and look like they work; it is only a secondary consideration to 
> make
> things faster if they turn out to be too slow.

Agreed. OTOH, in this case one might actually make it even quicker 
using qr//:

 foreach my $entry (uniq @IK) {
   my $entry_re = qr/$entry;/; 
   foreach my $line (@DATA) {
 
     if ($line=~ $entry_re) {
 
       splitline($line);  # @IK changes when I splitline
       #next; don't do this. It makes it slower
     }
   }
 }

Another thing ... if splitline($line) indeed does change @IK (which 
is a bad thing, it should not modify something behind the scenes) do 
you expect the outer foreach to note that? I hope not, in any case, 
it doesn't.

Especially if the $entry is long and is actually a regexp and not a 
string of letters. Of course if it's not meant to be a regexp you 
should use
   my $entry_re = qr/\Q$entry\E;/; 

Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
        -- Terry Pratchett in Sourcery


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to