File::Find NO RECURSION Howto

--005045017662b6b6d30480bb79b7
Content-Type: text/plain; charset=ISO-8859-1

Hi,

How can I stop File::Find to go below current dir? i.e. no recursion.

Although I can use glob or <*> to get file names in current dir.
But I wanted to know if File::Find has a maxdepth limit like linux "find".

The script I created uses a switch which decides if recursion is allowed or
not.
It uses the system find like this..

open(FIND, "find -maxdepth $recursive |" );

I wanted to remove this dependency on system find. Is it possible with
File::Find?

I tried this after googling

http://www.perlmonks.org/?node_id=676958

sub wanted
{
if ( -d ) { # should I write this as -d $File::Find::name
$File::Find::prune = 1;
return;
}
print $File::Find::name . "\n";
}

--005045017662b6b6d30480bb79b7--
raphael.japh [ Mo, 01 März 2010 12:23 ] [ ID #2033727 ]

Re: File::Find NO RECURSION Howto

raphael() wrote:
> Hi,
>
> How can I stop File::Find to go below current dir? i.e. no recursion.
>
> Although I can use glob or <*> to get file names in current dir.
> But I wanted to know if File::Find has a maxdepth limit like linux "find".
>
> The script I created uses a switch which decides if recursion is allowed or
> not.
> It uses the system find like this..
>
> open(FIND, "find -maxdepth $recursive |" );
>
> I wanted to remove this dependency on system find. Is it possible with
> File::Find?
>
> I tried this after googling
>
> http://www.perlmonks.org/?node_id=676958
>
> sub wanted
> {
> if ( -d ) { # should I write this as -d $File::Find::name

# No, this is shorthand for:
if( -d $_ ){

> $File::Find::prune = 1;
> return;
> }
> print $File::Find::name . "\n";
> }
>

And didn't it work? The if statement works on all directories. This
means that all directories except the top-level one will not be searched.


--
Just my 0.00000002 million dollars worth,
Shawn

Programming is as much about organization and communication
as it is about coding.

I like Perl; it's the only language where you can bless your
thingy.

Eliminate software piracy: use only FLOSS.

--
To unsubscribe, e-mail: beginners-unsubscribe [at] perl.org
For additional commands, e-mail: beginners-help [at] perl.org
http://learn.perl.org/
Shawn H Corey [ Mo, 01 März 2010 13:48 ] [ ID #2033730 ]

Re: File::Find NO RECURSION Howto

On Monday 01 Mar 2010 13:23:16 raphael() wrote:
> Hi,
>
> How can I stop File::Find to go below current dir? i.e. no recursion.
>
> Although I can use glob or <*> to get file names in current dir.
> But I wanted to know if File::Find has a maxdepth limit like linux "find".
>

Not, by itself, but there are wrappers around it that provides you with it.
And there are several alternative modules like File-Find-Object or File-Next
that solve some of its inherent philosophical limitations. For a summary see:

* http://www.shlomifish.org/open-source/projects/File-Find-Obj ect/

* http://www.perlfoundation.org/perl5/index.cgi?alternatives_t o_file_find

> The script I created uses a switch which decides if recursion is allowed or
> not.
> It uses the system find like this..
>
> open(FIND, "find -maxdepth $recursive |" );
>
> I wanted to remove this dependency on system find. Is it possible with
> File::Find?

It is possible.

>
> I tried this after googling
>
> http://www.perlmonks.org/?node_id=676958
>
> sub wanted
> {
> if ( -d ) { # should I write this as -d $File::Find::name
> $File::Find::prune = 1;
> return;
> }
> print $File::Find::name . "\n";
> }

Well, this will only be equivalent to -maxdepth 1 not to larger values. I
can't tell you offhand whether it's "-d $_" or "-d $File::Find::name" because
the File::Find interface is evil-incarnate and I'm trying to forget it. If you
want to prune after an arbitrary maxdepth, you'll need to keep track of the
current depth and the level there. May be File::Find gives you that but you
really should be using File::Find::Object, File::Find::Rule or
File::Find::Object::Rule .

Regards,

Shlomi Fish

--
------------------------------------------------------------ -----
Shlomi Fish http://www.shlomifish.org/
What does "Zionism" mean? - http://shlom.in/def-zionism

Deletionists delete Wikipedia articles that they consider lame.
Chuck Norris deletes deletionists whom he considers lame.

Please reply to list if it's a mailing list post - http://shlom.in/reply .

--
To unsubscribe, e-mail: beginners-unsubscribe [at] perl.org
For additional commands, e-mail: beginners-help [at] perl.org
http://learn.perl.org/
Shlomi Fish [ Mo, 01 März 2010 13:55 ] [ ID #2033731 ]

Re: File::Find NO RECURSION Howto

--000e0cd29c923681d00480bcd59b
Content-Type: text/plain; charset=ISO-8859-1

On Mon, Mar 1, 2010 at 6:18 PM, Shawn H Corey <shawnhcorey [at] gmail.com> wrote:

> raphael() wrote:
> > Hi,
> >
> > How can I stop File::Find to go below current dir? i.e. no recursion.
> >
> > Although I can use glob or <*> to get file names in current dir.
> > But I wanted to know if File::Find has a maxdepth limit like linux
> "find".
> >
> > The script I created uses a switch which decides if recursion is allowed
> or
> > not.
> > It uses the system find like this..
> >
> > open(FIND, "find -maxdepth $recursive |" );
> >
> > I wanted to remove this dependency on system find. Is it possible with
> > File::Find?
> >
> > I tried this after googling
> >
> > http://www.perlmonks.org/?node_id=676958
> >
> > sub wanted
> > {
> > if ( -d ) { # should I write this as -d $File::Find::name
>
> # No, this is shorthand for:
> if( -d $_ ){
>
> > $File::Find::prune = 1;
> > return;
> > }
> > print $File::Find::name . "\n";
> > }
> >
>
> And didn't it work? The if statement works on all directories. This
> means that all directories except the top-level one will not be searched.
>
>
> --
> Just my 0.00000002 million dollars worth,
> Shawn
>
> Programming is as much about organization and communication
> as it is about coding.
>
> I like Perl; it's the only language where you can bless your
> thingy.
>
> Eliminate software piracy: use only FLOSS.
>

Nope. It ddn't work. Any ideas?
I am thinking to use File::Find::Rule. But I didn't want any module
dependency for this script.

And Shlomi your message came in while I was typing this. Going to check the
modules you mentioned.
But it would have been great if I didn't has to use a module :( The people
around me no sh*t about installing perl
modules from CPAN.

Thanks all.

PS - Shlomi, your website is GOOD!

--000e0cd29c923681d00480bcd59b--
raphael.japh [ Mo, 01 März 2010 14:00 ] [ ID #2033732 ]

Re: File::Find NO RECURSION Howto

On Monday 01 Mar 2010 15:00:26 raphael() wrote:
> On Mon, Mar 1, 2010 at 6:18 PM, Shawn H Corey <shawnhcorey [at] gmail.com> wrote:
> > raphael() wrote:
> > > Hi,
> > >
> > > How can I stop File::Find to go below current dir? i.e. no recursion.
> > >
> > > Although I can use glob or <*> to get file names in current dir.
> > > But I wanted to know if File::Find has a maxdepth limit like linux
> >
> > "find".
> >
> > > The script I created uses a switch which decides if recursion is
> > > allowed
> >
> > or
> >
> > > not.
> > > It uses the system find like this..
> > >
> > > open(FIND, "find -maxdepth $recursive |" );
> > >
> > > I wanted to remove this dependency on system find. Is it possible with
> > > File::Find?
> > >
> > > I tried this after googling
> > >
> > > http://www.perlmonks.org/?node_id=676958
> > >
> > > sub wanted
> > > {
> > >
> > > if ( -d ) { # should I write this as -d $File::Find::name
> >
> > # No, this is shorthand for:
> > if( -d $_ ){
> >
> > > $File::Find::prune = 1;
> > > return;
> > >
> > > }
> > > print $File::Find::name . "\n";
> > >
> > > }
> >
> > And didn't it work? The if statement works on all directories. This
> > means that all directories except the top-level one will not be searched.
> >
> >
> > --
> > Just my 0.00000002 million dollars worth,
> >
> > Shawn
> >
> > Programming is as much about organization and communication
> > as it is about coding.
> >
> > I like Perl; it's the only language where you can bless your
> > thingy.
> >
> > Eliminate software piracy: use only FLOSS.
>
> Nope. It ddn't work. Any ideas?
> I am thinking to use File::Find::Rule. But I didn't want any module
> dependency for this script.

You can look at how File::Find::Rule does it and duplicate the logic.

>
> And Shlomi your message came in while I was typing this. Going to check the
> modules you mentioned.

Thanks.

> But it would have been great if I didn't has to use a module :( The people
> around me no sh*t about installing perl
> modules from CPAN.

Well, Matt S. Trout shared his sentiments about "I cannot use CPAN" here:

http://www.shadowcat.co.uk/blog/matt-s-trout/but-i-cant-use- cpan/

I've placed a link to it here:

http://perl-begin.org/topics/cpan/

>
> Thanks all.
>
> PS - Shlomi, your website is GOOD!

Thanks for the compliment! If possible, please share it with your friends and
on social-bookmarking/social-networks/etc. sites that you belong to.

BTW, you shoulnd't highlight words using all-uppercase-letters. (It's
considered akin to shouting). Instead use *...* , /.../ or _..._ .

Regards,

Shlomi Fish

--
------------------------------------------------------------ -----
Shlomi Fish http://www.shlomifish.org/
Optimising Code for Speed - http://shlom.in/optimise

Deletionists delete Wikipedia articles that they consider lame.
Chuck Norris deletes deletionists whom he considers lame.

Please reply to list if it's a mailing list post - http://shlom.in/reply .

--
To unsubscribe, e-mail: beginners-unsubscribe [at] perl.org
For additional commands, e-mail: beginners-help [at] perl.org
http://learn.perl.org/
Shlomi Fish [ Mo, 01 März 2010 17:40 ] [ ID #2033734 ]

Re: File::Find NO RECURSION Howto

Shlomi Fish wrote:
> Well, Matt S. Trout shared his sentiments about "I cannot use CPAN" here:
>
> http://www.shadowcat.co.uk/blog/matt-s-trout/but-i-cant-use- cpan/
>

Well, Matt is wrong. You can't always use CPAN. Yes, you can set it up
so you can use it in development, but that doesn't mean you can do it in
production. I have worked in places where the policy was no software
that's not approved by the sysadmins and approval of a single module may
take 6 to 18 months. They're even very strict about downloading a copy
and cut & paste. A foolish policy, kinda like, our horse will never get
sick from bad grain if we never feed it but managers _always_ know best. ;)


--
Just my 0.00000002 million dollars worth,
Shawn

Programming is as much about organization and communication
as it is about coding.

I like Perl; it's the only language where you can bless your
thingy.

Eliminate software piracy: use only FLOSS.

--
To unsubscribe, e-mail: beginners-unsubscribe [at] perl.org
For additional commands, e-mail: beginners-help [at] perl.org
http://learn.perl.org/
Shawn H Corey [ Mo, 01 März 2010 18:31 ] [ ID #2033735 ]

Re: File::Find NO RECURSION Howto

On Monday 01 Mar 2010 19:31:15 Shawn H Corey wrote:
> Shlomi Fish wrote:
> > Well, Matt S. Trout shared his sentiments about "I cannot use CPAN" here:
> >
> > http://www.shadowcat.co.uk/blog/matt-s-trout/but-i-cant-use- cpan/
>
> Well, Matt is wrong. You can't always use CPAN. Yes, you can set it up
> so you can use it in development, but that doesn't mean you can do it in
> production. I have worked in places where the policy was no software
> that's not approved by the sysadmins and approval of a single module may
> take 6 to 18 months. They're even very strict about downloading a copy
> and cut & paste. A foolish policy, kinda like, our horse will never get
> sick from bad grain if we never feed it but managers _always_ know best.
> ;)

Heh, tell me about it. Medium-to-large businesses shoot themselves in the foot
by incorporating these god-awful policies and becoming very non-agile. Then
they wonder why startups with much fewer resources can often easily out-
compete them. I read somewhere (Paul Graham I think, but I can no longer find
it) that as companies grow they adopt more and more rules and regulations
after learning from mistakes they made in the past. But these rules prevent a
lot of legitimate actions and in turn make the company much less agile. And
sometimes they impose these rules on start-ups that they buy.

It was later compared to
http://en.wikipedia.org/wiki/Sarbanes%E2%80%93Oxley_Act which killed the IPOs
in .us and was another regulation that was passed and which had unwanted side-
effects.

In any case, such antagonism towards using third-party code will make the
person working for such companies beyond help and doomed anyway you look at
it, so we can ignore it.

Regards,

Shlomi Fish

--
------------------------------------------------------------ -----
Shlomi Fish http://www.shlomifish.org/
Understand what Open Source is - http://shlom.in/oss-fs

Deletionists delete Wikipedia articles that they consider lame.
Chuck Norris deletes deletionists whom he considers lame.

Please reply to list if it's a mailing list post - http://shlom.in/reply .

--
To unsubscribe, e-mail: beginners-unsubscribe [at] perl.org
For additional commands, e-mail: beginners-help [at] perl.org
http://learn.perl.org/
Shlomi Fish [ Mi, 03 März 2010 12:32 ] [ ID #2033988 ]
Perl » gmane.comp.lang.perl.beginners » File::Find NO RECURSION Howto

Vorheriges Thema: Copy files from one machine to another machine
Nächstes Thema: mech->content match regex howto