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

I just discovered that the inplace-edit value can now include an asterisk to mean "old file". This means you can now do cool tricks like put your "old" versions of the file into a subdirectory with the original name, not a modified name! Here's a one-liner that puts all the old files into a directory named for the unix epoch timestamp (a 10-digit integer increasing by one per second).
perl -pe 'BEGIN { mkdir $^T; $^I = "$^T/*" } s/foo/bar/g' file1 file2 +file3 ...

Replies are listed 'Best First'.
•Re: Put your inplace-edit backup files into a subdir
by merlyn (Sage) on Apr 21, 2003 at 06:08 UTC
    I've had more than one person write to me in the day since I posted this snippet to say "Randal, you forgot the -i! It's not an in-place edit without that!".

    No, I didn't. Setting $^I is the programmatic equivalent to setting -i on the command-line.

    Cool, eh?

    -- Randal L. Schwartz, Perl hacker
    Be sure to read my standard disclaimer if this is a reply.

      I was personally puzzled at what $^T is for a moment, though I knew about $^I. So the simple form would be
      mkdir bak/ ; perl -pi'bak/*' -e 's/foo/bar/g' file1 file2 file3 ...
      Or
      perl -pi'bak/*' -e 'BEGIN { mkdir($^I =~ m!(.*/)!) } s/foo/bar/g' file +1 file2 file3 ...
      Or maybe even
      perl -MFile::Path -pi'bak/*' -e 'BEGIN { mkpath [ $^I =~ m!(.*/)! ] } +s/foo/bar/g' file1 file2 file3 ...
      *grin*

      Makeshifts last the longest.