You might like to consider this example code using inplace edit:
use warnings; use strict; # Create test file open testOut, "> test.txt"; print testOut $_ while (<DATA>); close testOut; # Get "user" edits my @userEdits = ( "Manager 1: IP 127.0.0.1" , "Manager 10: IP 127.0.0.10", "Manager 4: IP 127.0.0.40", "Manager 7:", ); # create update hash from user input my %edits; for (@userEdits) { my ($key, $value) = /(\d+):(?:.*?((?:\d{1,3}\.){3}\d{1,3}))?/; $edits{$key} = [$value, 0]; # value and written flag } # Update the file local $^I = '.bak'; local @ARGV = ('test.txt'); my ($key, $value); while (<>) # inplace edit { ($key, $value) = /(\d+):.*?((?:\d{1,3}\.){3}\d{1,3})/; my $line = $_; if (defined $key && exists $edits{$key}) { next if ! defined $edits{$key}->[0]; #delete file entry $line = "Manager $key: IP $edits{$key}->[0]\n"; ++$edits{$key}->[1]; # Mark as written } print $line; } continue { if (eof) { for (sort keys %edits) { next if ! defined $edits{$_} || ! defined $edits{$_}->[0]; print "Manager $_: IP $edits{$_}->[0]\n" if ! $edits{$_}->[1]; } last; } } __DATA__ Manager 1: IP 127.0.0.1 Manager 3: IP 127.0.0.3 Manager 4: IP 127.0.0.21 Manager 7: IP 127.0.0.12
Manager 1: IP 127.0.0.1 Manager 3: IP 127.0.0.3 Manager 4: IP 127.0.0.40 Manager 10: IP 127.0.0.10
In reply to Re: updating to a file
by GrandFather
in thread updating to a file
by s_gaurav1091
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |