What he was saying is that you have not given us enough detail for anyone to point you to an existing example, but it doesn't sound very hard. Unfortunately nobody can show you how to do it because you didn't give enough detail. So while Perl can do it, you need a clearer spec.

For instance do the inserted lines borrow any information from the matched lines? Are there any strings which you only match if they are not part of certain other things? If so then you'd have to use a more complex approach. Otherwise you could do something as simple as build your transformations up with:

my %transformation_by_filetype => ( "c" => { "foo" => qq{ You had a foo. }, "foo" => qq{ Bar is great. }, }, ); Then run something like this: <code> #! /usr/bin/perl -w use strict; for my $file (@ARGV) { my $filetype = determine_filetype($file); my $transformation = $transformation_by_filetype{$filetype}; rename($file, "tmp.$$") or die "Can't rename $file to tmp.$$: $!"; open (IN, "<", "tmp.$$") or die "Can't read tmp.$$: $!"; open(OUT, ">", $file) or die "Can't write $file: $!"; while (my $line = <IN>) { print OUT $line; for my $pattern (keys %$transformation) { if ($line =~ /$pattern/) { print OUT $transformation->{$pattern}; } } } } sub determine_filetype { my $filename = shift; $filename =~ s/.*\.//; return $filename; }
This is untested code so it may not even compile. It is also rather inflexible. See references quick references for an explanation of the data structures I used. Note that if a line matches both foo and bar this will insert both sets of strings and you can't control the order in which it does it. But if you understand how this works, and you understand complex data structures, then you should be able to tackle your undoubtedly more complex situation.

In reply to Re^3: Manipulating File Contents Interactively by tilly
in thread Manipulating File Contents Interactively by TheWorldPeace

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.