Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Pattern matching question

by linebacker (Scribe)
on Jun 24, 2002 at 20:26 UTC ( #176933=perlquestion: print w/replies, xml ) Need Help??

linebacker has asked for the wisdom of the Perl Monks concerning the following question:

Hello all, I have a problem matching a pattern in an array. I go an ftp site and download a listing of the directory. If the directory contains a string (The string happens to be x86.exe) then I write that to a file. The entries of the file contain along the lines of /path/to/remote/directory/0613x86.exe I want to compare the MM/DD with a local file and if the file on the ftp site is newer, then download it. Thanks for your help, here is my code so far.
#!/usr/local/bin/perl -w use Net::FTP; #use strict; $host = ''; $user = 'anonymous'; $pass = ''; $remote_dir = '/path/to/remote/directory'; $oldfilename = `ls current-sig`; chomp $oldfilename; $destination_dir= "current-sig"; $ftp = Net::FTP->new($host, Debug => 1); $ftp->login($user,$pass); my @listing = $ftp->ls("$remote_dir"); for (@listing) { if ( /x86.exe/i ) { open(FH, ">> myfile.txt") || die "Can't open $file for write: $!"; print FH "$_\n" } } close FH; open FH, "myfile.txt" or die "Couldn't open: $!"; while (<FH>) { @test = print "$_" } close FH; #$ftp->get("$remote_dir/$filename","$destination_dir/$filename"); $ftp->pasv(); $ftp->quit;

Replies are listed 'Best First'.
Re: Pattern matching question
by Anonymous Monk on Jun 24, 2002 at 20:58 UTC
    One might use to find the DDMM of the local file:
    ($day,$month) = localtime(stat($local_file_to_check)[9])[3,4]; $current_file_time = $month . $day;
    and then use this to match it against the date parsed back from @listing
Re: Pattern matching question
by Hofmator (Curate) on Jun 25, 2002 at 10:35 UTC

    I'm not sure if I understand your problem correctly. Do you want to extract the date from the filename? In that case you should be aware of a problem at the change of years. Consider e.g. 1224 (24th December 2002) is before 0101 (1st January 2003) but just looking at 1224 and 0101 you would normally judge the other way round, as you should assume they are in the same year.

    On the other hand - if you know that these files will be changed and updated once a week - you should be able to guess the change of year correctly.

    Anyway, take a look at Time::Local which allows to convert a date into epoch seconds. If you do that for both dates (guessing the year correctly) then you should be able to just compare the epoch seconds and tell if you need to update.

    -- Hofmator

      Thanks for the response. I am still struggling but getting a little closer. Hopefully Time::Local can bail me out. Yes you are correct that I have to get the date from the filename. Net::Ftp won't let me to long listings. Ugh. This has been very frustrating. My lack of Perl style Regex is killin me. Thanks Mike
        My lack of Perl style Regex is killin me.
        If this is targeted specifically to your problem at hand here, try this: my ($month, $day) = $filename =~ /(\d\d)(\d\d)x86\.exe/;

        -- Hofmator

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://176933]
Approved by grinder
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (7)
As of 2019-10-18 11:48 GMT
Find Nodes?
    Voting Booth?