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/