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/