in reply to Re^12: Question about the most efficient way to read Apache log files without All-In-One Modules from CPAN (personal learning exercise)
in thread Question about the most efficient way to read Apache log files without All-In-One Modules from CPAN (personal learning exercise)
quick glance of the source
You didnt look close enough.
This regex:
q{([^\s]*)\s+([^\s]*)\s+([^\s]*)\s+\[(([^: ]+):([^ ]+) ([-+0-9]+))\]\s ++"(([^\s]+) ([^\s]+)( ([^\s"]*))?)"\s+([^\s]*)\s+([^\s]*)};
Won't match "-", because it expects and requires at least two space delimited fields within the quotes; and allows for a third.
Note also that both ID fields are expected to match [^\s]* (I guess he's not aware of \S; and it should at least be + not *; which could be an indication of his perl experience.).
So, a "proper parser" would break. Maybe it has a back-up plan for if the regex fails; but equally, it's simple to code a back up plan for the white space split also.
So let's review:
Which is demonstrably wrong!
Look at the regex above! Wrong again.
Also wrong!
And, as I've shown above, that would (without special handling) break most pre-solved solutions; which I'll remind you: the OP explicitly didn't want.
And which could just as easily be handled by a special case with the split version.
You know, as a part of the personal learning experience!
A big part of which might be that having tried it for himself; he'd decides to opt for a pre-solved solution.
Or he might decide to write his own CPAN module that does it better than any of the existing ones.
That's his choice.
All I did was short circuit his learning, by informing him that pack & unpack were definitely the wrong tools to start with.
So, here we are 13 levels deep; and you've become boring. No attempt to help the OP; just banging on about stuff it seems you barely understand.
So, I'm bored and done. T'was fun.
Update: I forgot this little gem. You offered this wishy-washy suggestion "or using Text::CSV or somesuch"; but then later suggest that split will break because "which says nothing about logname and user,"; completely oblivious to the fact that if either ID contained spaces; it would break that module also!
|
|---|