The wanted() sub gets called every time a file/dir is found. Thus the map gets run every time. This is not efficient.

The typical perl idiom for doing this sort of thing involves making an RE that uses alternation operatior | as in m/this|that|other|thing/. We can automatically generate the RE from your array and also use qr// to compile it.

++ for using strict, warnings and modules BTW.

#!perl use strict; use warnings; use File::Find; my @ext = qw(.tmp .bak .$$$ .chk .old .gid .fts .ftg .log .dmp .--- .prv .temp); # build and compile an RE that uses alternation operator | my $re = join '|', map{ quotemeta } @ext; # compile RE. ?: avoids capture into $1 from ( ) # and the $ locks the matched ext to end of filename $re = qr/(?:$re)$/; sub wanted { return unless -f $_; return unless m/$re/; warn "Unlinking $File::Find::name\n"; unlink $_ or warn "\tUnlink $_ failed $!\n"; } find(\&wanted, '/');

Typically you want to do a dummy run without unlinking. Trust me on this ;-)

Update Fixed typo, thanks hv

cheers

tachyon


In reply to Re: Can anyone help me to improve this code, please? by tachyon
in thread Can anyone help me to improve this code, please? by htywky

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.