Recently, I was asked to find the first occurrence of a word in a text file and 
replace it with an alternate word.  This was my solution.  As a new Perl 
programmer, I feel like this solution was too C like and not enough Perl like.  
So, my question is what would have been the Perl like solution to this 
problem?  


In this example there is little risk of running out of memory reading the 
file.  But had this been a production environment or an unknown file size, I 
would have had to consider that.   


#!/usr/bin/perl
use strict;
use warnings;

#program finds the first occurrence of the word Dood and 
#replaces it with the word Dude in the file data.txt.

open FP, "+<", "data.txt" || die "Cant open data.txt " . $!;

my @buffer = <FP>;
seek FP,0,0;
my $do_replace = 1; #used to control replacing in multiline files.
my $line;
my $data;
foreach $data (@buffer)
{
    if ($do_replace == 1)
    {    
        $line = $data;
        $data =~ s/Dood/Dude/;
        if ($line ne $data)
        {
            $do_replace = 0; #we did a substitution so do no more.
        }
    }
    print FP $data;
}
close FP;

#Test data
#Dude! Where's my car?
#Dood! Where's my car?
#Dood! Where's my car?

 

--
Ronald Weidner

Reply via email to