Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Re: (tye)Re: 'Tailing' a File?

by lzcd (Pilgrim)
on Jan 11, 2001 at 06:33 UTC ( #51063=note: print w/replies, xml ) Need Help??

in reply to (tye)Re: 'Tailing' a File?
in thread 'Tailing' a File?

Ahhh that old chestnut again.

While 'rolling your own' is generally accepted as a really dumb thing to do, I think it's a little rough to slap the hand of anybody who even looks like they're reaching for the self constructed apple.

It's just one of those 'real world' type things that tend to happen. Despite what the rest of the world may be doing, it *might* just be faster, easier and a whole lot easier not to go with a precooked module from CPAN.

This is not a mini tirade directed at Tye, just an airing of petty groan that seems more and more applicable as the days progress. :)

What happened to TMTOWTDI? Yeah CPANs great and I'm sure Everything::Cured is just around the corner but do we have to ram it down the throat of every poor sap that asks for advice?

My advice: Sure give a subtle plug for your pick of CPAN stuff but if the poor soul is requesting advice for a CPAN free solution, try offering a CPAN free solution... even if it is just the same code handcopied across. :)

Replies are listed 'Best First'.
(tye)Re2: 'Tailing' a File?
by tye (Sage) on Jan 11, 2001 at 07:30 UTC

    Note that my innocent looking smiley was very important. ;) There is no black-and-white to this for me.

    Dealing with CGI forms without using is the closest to an absolute for me. I've never seen a case of not using for CGI forms that wasn't a mistake. Dealing with CGI forms exposed to the world is very complex and getting it wrong has serious consequences.

    Now, a much more middle-of-the-road case is File::Find. There are minor and major problems with File::Find and rolling your own is really pretty easy. Sure, there are several common mistakes that less experienced programmers make again and again when rolling their own File::Find so you should discourage casual re-rolling of File::Find. But I know all of those mistakes and I don't make those when I roll my own. ;)1

    And I understand the way-too-often repeated request for solutions that "use no modules". At one end are modules whose installation involve C compilers, grabbing external libraries from non-Perl web sites, porting code, finding patches, installing other modules that require other modules that require other modules, etc. After you've tried that once, I'm sure you'll be shy about the next time you hear the innocent-sounding "Oh, just install Magic::Black".

    At the other end we have, for example, File::KGlob. Someone once ask how to do what it does without using the module. Well I wrote that crufty old module. It consists of a single file of Perl code. My response then was much like the one I gave above (but without the sarcasm tags and the smiley).

    I suspected that File::Tail is much closer to the File::KGlob end of the spectrum (or I wouldn't have given that flippant response). Well, I just checked, and File::Tail is implemented as a single file of Perl code (but it includes a test suite and example scripts). Unfortunately, it requires the non-standard Time::HiRes and that one includes C code.

    I still suggested that they read the source code for File::Tail as the authors probably bothered to figure out a pretty good way to do things. If I were in this situation I'd probably patch File::Tail so that if Time::HiRes is not installed, then it works around that and just doesn't support sleeping for less than a second (which should be a fine restriction for the vast majority of people).

    When I write modules, I try to be very careful about what modules I require. For example, Win32::TieRegistry has some features that only work if certain modules are installed. But if those modules aren't installed, then everything else works just fine. I wish more module writers were careful about that type of thing.

    1 Recently I needed File::Find functionality and started out using the module. There was a natural way to do what I wanted that just didn't fit well with the way that File::Find did things. I wrote the code to deal with File::Find's different approach and it was awkward. In the end I rolled my own because adding my own traversal code made the rest of the code so much simpler that it was a net win.

            - tye (but my friends call me "Tye")

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://51063]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (5)
As of 2022-05-16 09:57 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (62 votes). Check out past polls.