toniax:
In response to your revised question, instead of your script to read a file and replace only the first line that matches your pattern I would use in-place editing, read and print each line and update a variable when the I've found and replaced the first occurrence of the pattern.
#!/usr/bin/perl
use strict;
use warnings;
my $filename = '/home/david/Programming/Perl/data/var.txt';
#So you can use diamond operator and inplace editing
push @ARGV, $filename;
#Enable inplace editing. Copy of input file saved as 'var.txt.bk'
$^I = ".bk";
my $replaced = 0;
while(<>){
chomp;
if ($replaced == 0
and s/the line to be replaced/this is the new line/){
$replaced++;
}
print "$_\n";
}