On Monday, July 22, 2002, at 08:11 , Bob H wrote:
> I have a script that is *supposed* to search a file and make certain > words that I have in an array uppercase. My brain is not grokking it. > > Q1: What is wrong with my script (below)? what sorts of error messages did you get? > === SCRIPT === > #!/usr/bin/perl > use strict; > use warnings; > > # variables > my $word = undef; > > # setup the words to uppercase > my @words = qw/ Mary John Joe /; > > open FILE, ">> NEW1 " or die "can't open FILE: $!"; so far so good... > while (<>) { why this outer loop? what if nothing is passed at the command line - hence <> evaluates to nothing and the script closes. > foreach $word (@words) { > $word = ~ tr /a-z/A-Z/; > print FILE; It might help to sort out what you really wanted to do here.... I am a fan of localizing scope so I so I would have gone with say: foreach my $word (@words) { $word =~ tr /a-z/A-Z/; print " $word \n"; } since I really only want to use 'my $word' here for each of the tokens in the @words list. then there is the bit about "=~" vice "= ~" the former is an operator that binds the variable on the left of the "=" to the 'pattern play' on the right. then, rather than hope that you did something with $_ it some times helps to just expressly Print the thing you want - in my case - I just sent it to stdout, in your case you want to write to the file FILE... since you would have wanted a loop like: foreach (@words) { tr/a-z/A-Z/; print ; } to use the implicit play with $_ - but I think your original idea of naming it was the better idea, you just needed to get that $word to the print command.... [..] > Q2: Can I update a file in place? yes, cf perldoc IPC::Open2 > Q3: How do I run multiple things against one file in one script? make sure they are all done between the open() and the close.... ciao drieux --- -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]