There's no easy way to do this save for parsing the replace-with string yourself. There's a rename script which comes with Perl, that allows you to pass Perl code as the first parameter, which it then executes for every file, passing the filename in $_ and moving the file if the code modified $_.

Note that $1 et al are most likely subject to parsing by the shell on Unixoid systems, as are parens and the backslash, so if you want to use them, you'll need to enclose the parameters in single quotes to prevent those characters from being interpreted by the shell.

Probably the sanest solution would be to use a printfish syntax for the right side, composing a new string from the captured bits for every match. Something like this (untested; esp. the pattern).

my ($re, $fmt) = @ARGV; function reformat { local $_ = $fmt; s/%(?:(\d+)|.)/$_[$1] if defined $1/ge; return $_; } # ... $re = qr/$re/; # precompile for(@list_of_files) { next unless (my @capture = /$re/); rename $_, reformat(@capture); }
You'd then call it something like foo '(.+)-(\d{,2})\.ext' moof-%1-%2.newext, using %% to use literal percent signs in the replace-with name.

Makeshifts last the longest.


In reply to Re: mmv-like hack in perl? (don't use s///) by Aristotle
in thread mmv-like hack in perl? by mpd

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.