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


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.