Actually it's a good question, and I should have explained myself. When you do this line on a file, it slurps up the entire contents of the file into an array:
@infile = <INFILE>; So the way to read a huge file without loading the entire file into memory is to use a while loop: but this changes the way you go about this a little bit. The code becomes: ############################## open(INFILE,"/etc/passwd"); open(OUTFILE,">/etc/passwd.bak"); #open a temp file to write while(<INFILE>){ #loads each line into $_, one line per loop if($_ =~ /^ftp/i){ #if it starts with "ftp" $_ = ''; #make it a zero-length string }elsif($_ =~ /guest/i){ #else if it contains "guest" $_ =~ s/guest/ftp/gi;#replace it with "ftp" } print OUTFILE $_; #write the changed code to the temp file } open(INFILE,"/etc/passwd.bak"); #now we copy the contents of open(OUTFILE,">/etc/passwd"); #the temp file to the original while(<INFILE>){ print OUTFILE $_; } close INFILE; close OUTFILE; unlink "/etc/passwd.bak"; #remove the temp file ###################### So the one real difference is that instead of creating a copy in memory, we have to create a temporary file to hold the contents of our changes. -----Original Message----- From: Langa Kentane To: 'Timothy Johnson' Sent: 5/13/02 10:54 PM Subject: RE: Delete a line and replace Hi Just a quick newbie question: How would you recommend we do that on a big file? -----Original Message----- From: Timothy Johnson [mailto:[EMAIL PROTECTED]] Sent: 13 May 2002 08:05 PM To: 'Jorge Goncalvez'; [EMAIL PROTECTED] Subject: RE: Delete a line and replace You can try something like this: open(INFILE,"/etc/passwd"); @infile = <INFILE>; #don't do this if your file gets big close INFILE; foreach(@infile){ if($_ =~ /^ftp/i){ #if it starts with "ftp" $_ = ''; #make it a zero-length string }elsif($_ =~ /guest/i){ #else if it contains "guest" $_ =~ s/guest/ftp/gi;#replace it with "ftp" } } open(OUTFILE,">/etc/passwd"); print OUTFILE @infile; -----Original Message----- From: Jorge Goncalvez [mailto:[EMAIL PROTECTED]] Sent: Monday, May 13, 2002 1:41 AM To: [EMAIL PROTECTED] Subject: Re:Delete a line and replace Hi, i have this file /etc/passwd like this: Everyone:*:0:0:,S-1-1-0:: SYSTEM:*:18:18:,S-1-5-18:: Administrators:*:544:544:,S-1-5-32-544:: Administrator:unused_by_nt/2000/xp:500:513:U-LININF54\Administrator,S-1- 5-21 -175 7981266-2139871995-725345543-500:/home/Administrator:/bin/bash anonymous:unused_by_nt/2000/xp:1017:513:U-LININF54\anonymous,S-1-5-21-17 5798 1266 -2139871995-725345543-1017:/home/anonymous:/bin/bash ftp:unused_by_nt/2000/xp:1018:513:U-LININF54\ftp,S-1-5-21-1757981266-213 9871 995- 725345543-1018:/:/bin/bash Guest:unused_by_nt/2000/xp:501:513:U-LININF54\Guest,S-1-5-21-1757981266- 2139 8719 95-725345543-501:/home/Guest:/bin/bash HelpAssistant:unused_by_nt/2000/xp:1000:513:Remote Desktop Help Assistant Account,U-LININF54\HelpAssistant,S-1-5-21-1757981266-2139871995-72534554 3-10 00:/ home/HelpAssistant:/bin/bash I wanted to delete all the line which begins with ftp and then replace Guest by ftp in all file. Thanks. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]