Hello, I'm updating a script that manages the .htpasswd file on *N*X boxes. The user records are stored on successive lines, in the form $username:$password. What I want to do is find a particular $username, then delete the entire line.
The current code reads the entire file into an array, then loops through every line in the array, incrementing a counter each time. If the $username part of the line matches, splice is used to remove that line from the area. Then the array is written back out to a new file. This seems inelegant to me (there should be some way to do this in two or three lines, this is PERL, is it not?), as well as memory-hogging and possibly slow (read the ENTIRE file in, even it it's the first user to be removed?) What I'd like to do is read in each line, check it, if it doesn't match, spit it out to the new file; if it does match, just copy the rest of the original file (sans one line) to the new file in one statement (blockMove like operation) Is there a way to do this? Later on, the boss wants the script to display a list of all users and allow an interactive deletion utility using forms, which will mean I'll have to read everything into an array (or multiple - is there any memory/speed advantage to dealing with several small arrays rather than one big one - say 20 in each for 20 names per page). I plan to do all this using CGI.pm at least eventually, I may hack something together without it until I learn it.. Is there a module out there for doing operations with files, like deleteing single lines in one call like "$f = open(..); $line = ($f->getLine(p); $f->deleteLine($q)" without having to read in in, process it, then write it back out? A Scheme-style MAP command would also be very useful. Thanks for listening to a lot of questions, Jim Witte [EMAIL PROTECTED] Indiana University "Perl Worker Bee", CGI-Factory.com -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]