take the o off the /o This is in essence saying you only have to compile this once for the processing going on. Take that off and see what happens. I believe you would use /o if you have regex has no variables which are changing with each iteration.
If you have any problems or questions, please let me know. Thanks. Wags ;) David R Wagner Senior Programmer Analyst FedEx Freight 1.408.323.4225x2224 TEL 1.408.323.4449 FAX http://fedex.com/us > -----Original Message----- > From: Karyn Williams [mailto:[EMAIL PROTECTED] > Sent: Wednesday, March 28, 2007 15:54 > To: beginners@perl.org > Subject: Exiting loops > > I have a sh script as follows. The script worked OK until the > year rolled > over. My (now deleted) simple sh way of figuring the month > and year blew > up. I decided to rewrite the script in perl because of the date/time > functions. It takes multiple commandline args (usernames) and > checks for > various information on them. Since the maillogs are so large > I want to exit > the first loop as soon as it is determined that the user has > checked their > mail. > > #!/bin/sh > > ext=`date +%Y%m` > > month1="200702" > month2="200701" > month3="200612" > month4=200611 > month5=200610 > month6=200609 > month7=200608 > > for i in $* ; do > > echo $i > > if test -r /export/home/$i/.forward ; then echo $i > has forward file > ; continue ; > elif [ "`fgrep -c "user=$i" /var/adm/maillog`" -gt > "0" ] ; then > echo $i checked mail month 0 ; continue ; > elif [ "`fgrep -c "user=$i" /export/home/archives/maillog.$month1`" > -gt "0" ] ; then echo $i checked mail month 1 ; continue; > elif [ "`fgrep -c "user=$i" /export/home/archives/maillog.$month2`" > -gt "0" ] ; then echo $i checked mail month 2 ; continue; > elif [ "`fgrep -c "user=$i" /export/home/archives/maillog.$month3`" > -gt "0" ] ; then echo $i checked mail month 3 ; continue; > elif [ "`fgrep -c "user=$i" /export/home/archives/maillog.$month4`" > -gt "0" ] ; then echo $i checked mail month 4 ; continue; > elif [ "`fgrep -c "user=$i" /export/home/archives/maillog.$month5`" > -gt "0" ] ; then echo $i checked mail month 5 ; continue; > elif [ "`fgrep -c "user=$i" /export/home/archives/maillog.$month6`" > -gt "0" ] ; then echo $i checked mail month 6 ; continue; > else echo $i has not checked mail in the last 6 months ; > fi > > echo checking last for 2007 ; last -3 $i > echo checking 2007 dial-up ; fgrep -c P${i} > /var/adm/radacct/pleiades/detail > echo checking for last modified file ; ls -lrt > /export/home/$i | > tail -2 > echo checking for newest file in public_html ; ls -lrt > /export/home/$i/public_html | tail -2 > ls -lsu /export/mail/$i > quota -v $i > finger -m $i > > done > > This is what I have so far in perl: > > # cat tt.pl > #!/usr/bin/perl -w > > use POSIX; > > # Get the current month and year > my ($mon,$year) = (localtime)[4,5]; > > # Seed nmonth > > my @nmonth = (1,1,1,1,$mon,$year,0,0); > > my $sec = 1; > my $min = 1; > my $hour = 1; > my $day = 1; > my $wday = 0; > my $yday = 0; > > # Put the loop here > my $a = 1; > while ($a < 7) { > > my $current = mktime($sec, $min, $hour, $day, $nmonth[4], > $nmonth[5], $wday, $yday); # Make new timestamp for the first > @nmonth = localtime($current); # Make an > array out of the > timestamp to get the month and year > my $ext_mon = ($nmonth[4] + 1); # Pull the > month out of the > array and add 1 to get month number > my $ext_year = ($nmonth[5] + 1900); # Pull the > year and add > 1900 to get the actual year > if ($ext_mon <= 9) { # Make the > month have two > places and write the var $ext > $ext = $ext_year . '0' . $ext_mon; > } > else { > $ext = $ext_year . $ext_mon; > } > > push (@flist, $ext); > $current = $current - 86400; # Subtract one day > from the first > timestamp to get the month before > @nmonth = localtime($current); # Make an > array out of the > new timestamp for the next round > } > continue { > $a++; > } > > # This is the part I am having trouble with : > > foreach $k (@ARGV) { > > if (-e ("/export/home/$k/.forward")) { > print "User $k has a forward file.\n\n" ; next ; > } else { > > open MAILLOG, "/var/adm/maillog" or die "couldn't > open maillog : > $!\n"; > if ($count = grep /user=$k/o, <MAILLOG> ) { > print "$k checked mail $count times in > /var/adm/maillog.\n"; next ; > } else { > close MAILLOG; > > open MAILLOG, "/export/home/archives/maillog.$flist[1]" or die > "couldn't open maillog.$flist[1] : $!\n"; > if ($count = grep /user=$k/o, <MAILLOG> ) { > print "$k checked mail $count times in > maillog.$flist[1].\n"; next ; > } else { > close MAILLOG; > > open MAILLOG, "/export/home/archives/maillog.$flist[2]" or die > "couldn't open maillog.$flist[2] : $!\n"; > if ( $count = grep /user=$k/o, <MAILLOG> ) { > print "$k checked mail $count times in > maillog.$flist[2].\n"; next ; > } else { > close MAILLOG; > > open MAILLOG, "/export/home/archives/maillog.$flist[3]" or die > "couldn't open maillog.$flist[3] : $!\n"; > if ( $count = grep /user=$k/o, <MAILLOG> ) { > print "$k checked mail $count times in > maillog.$flist[3].\n"; next ; > } else { > close MAILLOG; > > open MAILLOG, "/export/home/archives/maillog.$flist[4]" or die > "couldn't open maillog.$flist[4] : $!\n"; > if ( $count = grep /user=$k/o, <MAILLOG> ) { > print "$k checked mail $count times in > maillog.$flist[4].\n"; next ; > } else { > close MAILLOG; > > open MAILLOG, "/export/home/archives/maillog.$flist[5]" or die > "couldn't open maillog.$flist[5] : $!\n"; > if ( $count = grep /user=$k/o, <MAILLOG> ) { > print "$k checked mail $count times in > maillog.$flist[5].\n"; next ; > } else { > close MAILLOG; print "$k has not checked their mail > in the last 6 > months.\n"; > > } > } > } > } > } > } > > } > } > > > Input and output looks like this: > > # ./tt.pl karyn smurphy root > karyn checked mail 2864 times in /var/adm/maillog. > smurphy checked mail 2864 times in /var/adm/maillog. > root checked mail 2864 times in /var/adm/maillog. > # > > Yes, it goes to the next arg but as you can see, it returns > the same count > for each subsequent arg. > > I feel that my braces are (all/part/some) of the problem, but not sure > how/what. Any suggestions would be appreciated. > > > -- > > 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/ > > > ********************************************************************** This message contains information that is confidential and proprietary to FedEx Freight or its affiliates. It is intended only for the recipient named and for the express purpose(s) described therein. Any other use is prohibited. ********************************************************************** -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/