in reply to Re^9: Help editing a file based off seach criteria
in thread Help editing a file based off seach criteria

This is ghetto, but it works... since I now know the line where I need to edit, how would I then edit the file and input data at that specific line?
#!/usr/bin/perl open DATA, "</home/file.conf"; while (<DATA>) { if(m/\END\b/) { print "$.\n"; print "$_\n"; $pos = $.; $pos--; chomp $pos; $DESIRED_LINE_NUMBER = $pos; } } $. = 0; do { $LINE = <DATA> } until $. == $DESIRED_LINE_NUMBER || eof; print $LINE;

Replies are listed 'Best First'.
Re^11: Help editing a file based off seach criteria
by Corion (Patriarch) on Jan 13, 2009 at 18:04 UTC

    Have you actually tested your code? Assigning to $. does not reset the file pointer in any way. You need to either use seek, or go a step back and look at the original suggestion of using Tie::File. Or, actually, start thinking about the approach I outlined twice already.

      I cant use Tie, it's not included in my version of perl, and im restricted on what I can install. Yes this works, otherwise I wouldnt have posted it.

        First of all, Yes, even you can use CPAN, and you can always copy the code from within modules into your program.

        Second, are you sure that it works? Because after adding some print statements to your code to monitor its progress it seem to me that it's not doing anything sensible:

        #!/usr/bin/perl use strict; #open DATA, "</home/file.conf"; my $DESIRED_LINE_NUMBER; my $LINE; while (<DATA>) { if(m/END/) { print "END line is on line >$.\n"; print "END line is >$_\n"; my $pos = $.; $pos--; chomp $pos; $DESIRED_LINE_NUMBER = $pos; } } print "Moving to line number $DESIRED_LINE_NUMBER\n"; $. = 0; do { $LINE = <DATA>; print "Discarding: $LINE\n" } until $. == $DESIRE +D_LINE_NUMBER || eof; print "Found desired line $DESIRED_LINE_NUMBER as '$LINE'\n"; __DATA__ foo bar baz END bloob blargh blubb blubb2

        But then again, if you're confident that it does what you want, most likely you're also able to modify it yourself to do more of what you want.

        The modified program outputs:

        C:\Projekte>perl -w tmp.pl >4 >END Moving to line number 3 Use of uninitialized value $LINE in concatenation (.) or string at tmp +.pl line 2 6. Discarding: Use of uninitialized value $LINE in concatenation (.) or string at tmp +.pl line 2 7. Found desired line 3 as ''

        ... which doesn't look like the line above the END line to me.