Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^5: When should a wheel be reinvented

by etcshadow (Priest)
on Jul 01, 2004 at 02:55 UTC ( #370973=note: print w/ replies, xml ) Need Help??


in reply to Re^4: When should a wheel be reinvented
in thread When should a wheel be reinvented

Interesting...

Honestly, I'd really rather not see yet another implementation of directory traversal in perl. What I think would be the ideal is to have just one implementation (let it stay File::Find, everyone already knows it!), but have that implementation be usable with each of these types of interface:

  1. callbacks
  2. declaratively (by that I mean: my @files = File::Find::find(...); or something similar)
  3. iterator

Presently, File::Find provides 1, directly. File::Find::Rule and its ilk provide 2 (as a wrapper around File::Find... which is great, because that means no one has to replicate the directory traversal code for that). The thing that's missing is a good iterator interface, and, again, that can't be built as a wrapper around File::Find.

So of course, the best possible thing (in my opinion) would be if someone rewrote File::Find so that it (internally) had an iterator interface:

my $finder = File::Find->new($opts, @dirs); while (my $file = $finder->next) { # do stuff }
And then, finally, to change the old familiar File::Find::find(...) to be implemented as a simple wrapper around File::Find's iterator interface:
# simplified a lot, but basically sub find { my ($opts, @dirs) = @_; $opts = wrap_wanted ($opts); my $wanted = $opts->{wanted}; my $finder = File::Find->new($opts, @dirs); while (my $file = $finder->next) { local $_ = $file; local ... # etcetera &$wanted } }
So you'd get:
  • all the benefits of each type of interface
  • the directory traversal written (and optimized and maintained, etc) only once
  • nothing gets broken (all we've done is to refactor and to add new functionality)

Of course, I feel bad demanding this, without volunteering to do it, but honestly, it would create legal complications if I were to do so (I've got one of those contracts where my employer owns everything I do... at least for the moment, but I've been promised that that will change at least somewhat by the end of july). But I still think that the "most best" approach is clear enough that it's worth setting down (even if I'm not going to go off and implement it myself).

------------ :Wq Not an editor command: Wq


Comment on Re^5: When should a wheel be reinvented
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (11)
As of 2015-07-06 21:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (83 votes), past polls