Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

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

by Kenosis (Priest)
on Dec 01, 2012 at 21:39 UTC ( #1006645=note: print w/ replies, xml ) Need Help??


in reply to Re^2: How can i debug compound map/grep statements just using print?
in thread How can i debug compound map/grep statements just using print?

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.


Comment on Re^3: How can i debug compound map/grep statements just using print?
Select or Download Code
Re^4: How can i debug compound map/grep statements just using print?
by karlgoethebier (Vicar) on Dec 01, 2012 at 23:22 UTC

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

    «The Crux of the Biscuit is the Apostrophe»

      Ah, yes--that makes sense! Used the hours calculation for all four snippets:

      $amount = $amount * 60 * 60;

      and got identical results, until 79 hours was used (a result difference of 2), but I suspect the division in the grep { -M >= $amount / 86400 } yields a different precision.

      Interestingly, IO::All didn't see the file "song自然之歌," but File::Find::Rule did (and should have).

        I'm lucky not having a file named இளவரசன்.mp3 ;-)

        «The Crux of the Biscuit is the Apostrophe»

Re^4: How can i debug compound map/grep statements just using print?
by karlgoethebier (Vicar) on Dec 02, 2012 at 00:03 UTC

    "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»

      I really should have said that I wasn't suggesting a different or better way by using File::Find::Rule. Only used it to verify your results (like inter-rater reliability). Yours was a good map/grep piece.

      Nice update, by the way...

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (8)
As of 2015-07-05 19:59 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 (67 votes), past polls