I have this script I have been working on where I need to redirect STDOUT and STDERR to files at the beginning of the script and then back to default (terminal) at the end of the script. I found an example on-line and used it and it works, however it generates a warning when running my script. I would prefer to make that warning go away. This is the output of the script:
alum# ./match.pl Name "main::OLDERR" used only once: possible typo at ./match.pl line 38. Name "main::OLDOUT" used only once: possible typo at ./match.pl line 37. Records processed: 2 Kicked as dups: 1 Kicked as exceptions: 0 Accounts created: 1 This is the script: #!/usr/bin/perl # match.pl expanded # Checks the current csv against the passwd file to detect and prevent creating duplicate accounts use strict; use warnings; my $dir = "/usr/local/accounts"; my $csv = "isirin.csv"; my $expin = "exceptions.csv"; my $pwfile = "/etc/passwd"; my $expout = "exceptions.log"; my $clog = "account_change.log"; my $as400 = "as400.txt"; my $admiss = "admissions.txt"; my $err = "error.log"; my $description = "SIR Fall 2007"; my $date = localtime(); my ($sec,$min,$hour,$mday,$mon,$year) = (localtime)[0,1,2,3,4,5]; $mday++; $mon++; $year += 1900; my $today = sprintf("%04d%02d%02d-%02d%02d%02d", $year, $mon, $mday, $hour, $min, $sec); # Read in csv file from Accounting and check for existing accounts. open (IN, "$dir/$csv") or die "$dir/$csv does not exist. This file must be available to run this script: $!"; open (EX, "$dir/$expin") or die "Can't open EX $expin : $!"; open (PW, "$pwfile") or die "Can't open PW $pwfile : $!"; open (EXCEP, ">>$dir/$expout") or die "Can't open EXCEP: $!"; open (OUT, ">>$dir/$clog") or die "Can't open OUT: $!"; open (AOUT, ">$dir/$as400") or die "Can't open AOUT: $!"; open (OLDOUT, ">&STDOUT"); open (OLDERR, ">&STDERR"); open (STDOUT, ">$dir/$admiss") or die "Can't open STDOUT: $!"; open (STDERR, ">>$dir/$err") or die "Can't open STDERR: $!"; my $pwf; my $exp; my $gecos; my $login; my $rcount = 0; my $acount = 0; my $ecount = 0; my $lcount = 0 ; my @line = <IN>; printf STDOUT ("$date\n"); # Slurp the /etc/passwd file into one string and then search for matching Student IDs in that # string. Use this later for checking unused loginnames also. while (<PW>) { $pwf .= $_; } while (<EX>) { $exp .= $_; } # Create GECOS and login info and then create account using pw foreach my $line (@line) { next if $line =~ /^nameid/; next if $line =~ /^$/; next if $line =~ /^\s+$/; # file format is nameid,first,init,last #print $line; chomp $line; $rcount++; my ($sid,$name) = split(/,/, $line,2); if ($pwf =~ /\b$sid\b/) { printf EXCEP ("$date, $name, $sid, possible dup account\n"); $acount++; } elsif ($exp =~ /\b$sid\b/) { printf EXCEP ("$date, $name, $sid, listed in exceptions.csv\n"); $ecount++; } else { my ($first, $initial, $last) = split(/,/, $name, 3); # Create gecos info $last =~ s/[",]//g; $first =~ s/[",]//g; $initial =~ s/[",]//g; if ($initial) { $gecos = "\"$first $initial $last, $sid, $description\""; } else { $gecos = "\"$first $last, $sid, $description\""; } #print "GECOS IS $gecos\n"; # Now guess at a login my $lfirst = $first; $lfirst =~ s/[^a-zA-Z]//g; #(my $lfirst = $first) =~ s/[^a-zA-Z]//g); my @last = split(/\s/, $last, 2); my $llast = $last[0]; $llast =~ s/[-\s]//g; #print "LoginLast is $llast\n"; if (length($lfirst) + length($llast) <= 16) { $login = $lfirst . $llast; } else { my $f = substr(($lfirst),0,1); $login = $f . $llast; } $login = lc($login); #print "Login is $login\n"; #printf STDOUT ("$first $initial $last, $sid, $login, passwd\n"); printf STDOUT ("$first $initial $last, $sid, $login, "); #This next line is for testing purposes system("pw useradd -n $login -c $gecos -m -s /bin/ftpshell -N"); #system("pw useradd -n $login -c $gecos -m -s /bin/ftpshell -w random"); printf OUT ("$date Account Added, $first $initial $last, $login, $sid\n"); printf AOUT ("$sid, $first $initial $last, $login\n"); $lcount++; } } close IN; close OUT; close AOUT; close STDOUT; close STDERR; close EX; close PW; close EXCEP; rename ("$dir/$csv", "$dir/$csv.$today") or die "Can't rename $dir/$csv : $!"; open(STDOUT, ">&OLDOUT"); open(STDERR, ">&OLDERR"); print "Records processed: $rcount\n"; print "Kicked as dups: $acount\n"; print "Kicked as exceptions: $ecount\n"; print "Accounts created: $lcount\n"; # send via e-mail output of this script. my $to = "To: [EMAIL PROTECTED]"; my $from = "From: [EMAIL PROTECTED]"; my $subject = "Subject: Test Output for SIRs"; my $sendmail = "/usr/sbin/sendmail -t"; my @files = ("$dir/$as400", "$dir/$admiss"); my @mail = (); foreach my $file (@files) { open (MAIL, "|$sendmail") or die "Can't open $sendmail: $!"; open (AOUT, "<$file") or die "Can't open AOUT for read: $!"; print MAIL "$to\n"; print MAIL "$from\n"; print MAIL "$subject\n"; @mail = <AOUT>; foreach my $line (@mail) { print MAIL $line; } close (MAIL); close AOUT; } # end of script TIA -- Karyn Williams Network Services Manager California Institute of the Arts [EMAIL PROTECTED] http://www.calarts.edu/network -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/