I agree, testing your code you need to either do as
rollyguy has suggested, or it does work doing:
open (PROG, "+>>$0");
In running your code withthe + in it, I have found your regexp does not work as well.
Here is my version, and followed by the output:
#!/usr/bin/perl
use strict;
use warnings;
my $new_value = 10;
my $data=45;
open (PROG, "+>>$0");
seek (PROG, 0, 0); #not working
while (<PROG>)
{
s/^(my .data\s*=\s*)\d+(\s*;)/$1.$new_value.$2/e;
print;
}
close (PROG);
Output:
#!/usr/bin/perl
use strict;
use warnings;
my $new_value = 10;
my $data=10;
open (PROG, "+>>$0");
seek (PROG, 0, 0); #not working
while (<PROG>)
{
s/^(my .data\s*=\s*)\d+(\s*;)/$1.$new_value.$2/e;
print;
}
close (PROG);
Note: I'm not writing to the file itself, now that I'm thinking about it you probably want to write a temp file, then copy it over....
Hope this helps!