Hi Atropo, On Tuesday 17 August 2010 15:37:51 Atropo wrote: > Hi all, i have this simple script to check if a file has arrive since > the last hour > > find2perl tmp -type f -eval '-M $_ < 1/24' -print |perl > > but now i would like to check in a remote server, maybe on ftp > session. i have this ftp.pl > > perl -w >> ftp.log -MNet::FTP -le'
Please: 1. Don't write your program as a gigantic -e '...' block. Instead - put it in a separate file. You can't honestly expect us to debug it. 2. See https://www.socialtext.net/perl5/index.cgi?ancient_perl 3. "use strict;" and "use warnings;". 4. Quoting perlbot: {{{ <perlbot> use strict; use warnings; use lexical filehandles instead of globals (open my $tmp ..vs.. open TMP), use three argument form of open, don't use prototypes unless you really want to. don't call subs with & unless it's required (&sub() ..vs.. sub()). check for errors (open (); ..vs.. open() or die $!) }}} > ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek > +, $dayOfYear, $daylightSavings) = localtime(); You should use a good datetime module instead. I like http://search.cpan.org/dist/DateTime/ but there are others. > $year = 1900 + $yearOffset; > $theGMTime = "$hour:$minute:$second, $months[$month] $dayOfMonth, > $year"; > ( $host, $user, $pass, $dir ) = @ARGV; > $ftp = Net::FTP->new($host) or die "$...@\n"; #send mail if cannot > connect do not know how to do it > $ftp->login( $user, $pass ) or die $ftp->message; > $ftp->cwd($dir) or die $ftp->message; > $ftp->binary; > for $file ($ftp->ls){ > push @files, $file; > } > > for $file (@files) { > $quesesto=localtime($ftp->mdtm($file)); > $localtimenoformat=localtime(time()); > $mdtmnoformat=$ftp->mdtm($file); > print "MDTM with FORMAT = $quesesto\n"; > print "Localtime No Format = $localtimenoformat\n"; > print "MDTM No Format = $mdtmnoformat\n"; > #envia_mail (); > } > $ftp->quit or die $ftp->message; > > sub envia_mail { > print "Content-type: text/html\n\n"; > > #$title=''; > $to="alexis_vasqu...@codetel\.com\.do"; > $from= `hostname`; > #$subject=''; > > open(MAIL, "|/usr/sbin/sendmail -t"); > > ## Mail Header > print MAIL "To: $to\n"; > print MAIL "From: $from\n"; > print MAIL "Subject: $subject\n\n"; > ## Mail Body > print MAIL "This is a test message \n"; > > close(MAIL); > > print "<html><head><title>$title</title></head>\n<body>\n\n"; > > ## HTML content sent, let use know we sent an email > print " > <h1>$title</h1> > > A message has been sent from $from to $to > > </body></html>"; You should use a here-document here. > > } > > 'host user pass dir Don't append the «host» parameter to the end of hte '....' - it will be part of the program. > > Still cant't figure out how to check if file is newer that an hour. I > can get this: > > MDTM with FORMAT = Fri Aug 21 12:23:15 2009 > Localtime No Format = Fri Aug 13 10:17:10 2010 > MDTM No Format = 1250871795 > > But don't know how to get the 'localtime with NO Format' to compare > with the 'MDTM with NO Format' Just use timestamps, or use the DateTime module. You can find if a timestamp is in the last hour by "time() - $timestamp < 60*60". Regards, Shlomi Fish -- ----------------------------------------------------------------- Shlomi Fish http://www.shlomifish.org/ "The Human Hacking Field Guide" - http://shlom.in/hhfg God considered inflicting XSLT as the tenth plague of Egypt, but then decided against it because he thought it would be too evil. Please reply to list if it's a mailing list post - http://shlom.in/reply . -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] http://learn.perl.org/
