Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

File::Find Usage with 2 subroutines

by pnaik (Initiate)
on Jun 14, 2013 at 16:22 UTC ( #1038991=perlquestion: print w/ replies, xml ) Need Help??
pnaik has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I have coded a find call with 2 different subroutines being called to do two different things. However, my observation is that, the first find call with its associated sub works just fine. But when find is called the second time with a different sub, still the first sub is actually being entered. Just wanted to know if there is any limitation on find and number of subs associated ? Else i'll debug my code.

Example representation of what i'm trying to do in my script

sub finda { print "In finda, $File:Find:name\n"; } sub findb { print "In findb, $File:Find:name\n"; } find (\&finda, "/abc/xyz"); find (\&findb, "/pqr");

Note : (Folder abc/xyz contains a file named file1, and folder pqr contains a file named file2)

Output:

Expected:

In finda, /abc/xyz/file1

In findb, /pqr/file2

Getting:

In finda, /abc/xyz/file1

In finda, /abc/xyz/file1

Comment on File::Find Usage with 2 subroutines
Download Code
Re: File::Find Usage with 2 subroutines
by talexb (Canon) on Jun 14, 2013 at 16:38 UTC

    You've provided snippets of code -- do you have a complete script that exhibits this debhaviour, specifically including use strict and use warnings?

    Alex / talexb / Toronto

    "Groklaw is the open-source mentality applied to legal research" ~ Linus Torvalds

Re: File::Find Usage with 2 subroutines
by Laurent_R (Parson) on Jun 14, 2013 at 22:33 UTC

    I can see a number of problems and possible pmroblems in your program.

    Your are not showing the find subroutine, we can't know what it does.

    The finda and findb procedures don't use any parametgers passed to them. This lost probably can't be right.

    The Find:Fine:name call does not serem to use any parameter from your previous code.

    Please show your full program.

      I'm not using use strict or use warning in my script.

      Well the find sub is not shown as it comes from the package use File::Find.

      My script is quite big, should I paste it fully here or is there a way to attach it ?

      One more observation meanwhile, if I change the second find call from find(\&findb, "/pqr") to find(&findb, "/pqr"), it does enter findb sub now but the file pointed by $File::Find::name is still from the /abc/xyz folder, i.e file1.

      2nd Output: In findb, /abc/xyz/file1

        Hello pnaik!
        It's well worth reading this: How do I post a question effectively? :)
        You should always have "use strict" and "use warning" near the start of your script (except in trivial scripts). They'll save you a lot of time catching bugs at compile time.
        One more observation meanwhile, if I change the second find call from find(\&findb, "/pqr") to find(&findb, "/pqr"), it does enter findb sub now but the file pointed by $File::Find::name is still from the /abc/xyz folder, i.e file1.

        That is to be expected. It actually calls findb() before calling File::Find::find() -- that's what the syntax means. It's not a subroutine reference but a call.

        Anyway, there is no problem with your code as you've posted; I'd look into other possible problem areas such as file system permissions and the logic in the rest of your script

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1038991]
Approved by talexb
Front-paged by toolic
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2014-12-25 17:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (161 votes), past polls