Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: How can i debug compound map/grep statements just using print?

by Kenosis (Priest)
on Dec 01, 2012 at 19:01 UTC ( [id://1006628]=note: print w/replies, xml ) Need Help??


in reply to How can i debug compound map/grep statements just using print?

Did you mean:

$amount = $amount * 24 * 60 * 60;

And have you tried:

$result = grep { /.+\.$suffix$/ and $time - ( $_->stat )[9] >= $amount } io($dir)->all;

$result is the file count...

Replies are listed 'Best First'.
Re^2: How can i debug compound map/grep statements just using print?
by karlgoethebier (Abbot) on Dec 01, 2012 at 19:57 UTC

    No.

    Karls-Mac-mini:~ karl $ perl -e 'print 2*60*60;' 7200
    perl -e 'print scalar( grep { $_ == 1 } (0,0,0) );' # nothing found 0
    perl -e 'print scalar( grep { $_ == 1 } (1,0,0) );' # one found 1

    «The Crux of the Biscuit is the Apostrophe»

      You have the following:

      =item B<-a, --amount> Search for files older than <amount> days, mandatory.

      In two days, there are 2 * 24 * 60 * 60 or 172800 seconds, thus it seemed that the following was needed:

      $amount = $amount * 24 * 60 * 60;

      since one day equals 24 * 60 * 60 or 86400 seconds. Additionally, the following worked when I ran it using the above formula for $amount:

      $result = grep { /.+\.$suffix$/ and $time - ( $_->stat )[9] >= $amount } io($dir)->all;

      An equivalent search can be done using File::Find::Rule:

      $result = File::Find::Rule->file() ->maxdepth(1) ->name(qr/.+\.$suffix$/i) ->mtime(">= $amount") ->in($dir);

      And the following, too, but grepping on days old instead of using mtime:

      $result = grep { -M >= $amount / 86400 } # Convert back to days File::Find::Rule->file() ->maxdepth(1) ->name(qr/.+\.$suffix$/i) ->in($dir);

      All three methods produced the same result, even when an equivalent constant was used for the days in the last grep.

      After adjusting the $amount formula, your original code produced the same result, too:

      $result = grep { $_ == 1 } map { $time - $_ >= $amount } map { ( $_->stat )[9] } # e.g i'm interested in this... grep { $_->name =~ /.+\.$suffix$/ } # ...and this io($dir)->all;

      Thus, all four code snippets produced identical results.

        Sorry about that awkward typo: should have been hours...

        «The Crux of the Biscuit is the Apostrophe»

        "An equivalent search can be done using File::Find::Rule"

        This is simply true, but what i wanted to do was this:

        • Not using File::Find
        • Not using File::Find::Rule"
        • Not using qx(find...[options])
        • Bothering myself with map/grep

        Thank you very much for your advice and the insights you gave to me. Regards, Karl

        «The Crux of the Biscuit is the Apostrophe»

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (7)
As of 2024-04-23 10:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found