Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

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

by Kenosis (Priest)
on Dec 01, 2012 at 19:01 UTC ( #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 (Parson) on Dec 01, 2012 at 19:57 UTC


    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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1006628]
[marinersk]: choroba++
[choroba]: it's a long running test, so it's normally skipped unless an env var is set
[choroba]: nobody has been bothered to set the variable in the last 3 years
[marinersk]: sub newtest{my $expected_result = &target('foo'); my $actual_result = &target('foo'); if ($actual_result eq $expected_result) { &tdd_success(); } else { &tdd_fail(); } } # Test works after three years!
[choroba]: or nobody bothered...
[choroba]: The problem was bigger, as the test tried to call a method that didn't exist anymore
[marinersk]: :: ducking ::
[choroba]: because, someone renamed the method, but didn't notice it was used in the test, as the test was skipped
[marinersk]: Well, if the method doesn't exist, it would be hard to pass the test.
[choroba]: later, someone removed the new method, as all its usage places were safe, but didn't notice the test still used the old name

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (11)
As of 2017-05-25 15:08 GMT
Find Nodes?
    Voting Booth?