Avatar billede maksi Nybegynder
14. december 2001 - 12:31 Der er 8 kommentarer og
1 løsning

Help me with a \"simpel\" perl program!

Could somebody help me with the following questions? 
I prefer English answers but it is also okay with Danish answers.

Consider the enclosed PERL program, webcollect4.pl:

a. Describe exactly what command line arguments   
  webcollect4.pl takes.
   
#!/usr/bin/perl
# webcollect4.pl
#
$location = $ARGV[0];
$level = $ARGV[1];
if (!$level) { exit;}
print STDERR \"*** page: $location level $level\\n\";

@contents = `/usr/bin/lynx -source $location`;
foreach $line (@contents) {
    $newloc = \"\";

# http href
    if ($line =~ m/href=\\\"?(http:[^\\>\\s\\\"]+)/i) {
    $newloc = $1;
# href starting with ./ (local file)
    } elsif ($line =~ m/href=\\\"?[.]\\/([^\\>\\s\\\"]+)/i) {
    $newloc = \"$location/$1\";
# href starting with local file name
    } elsif ($line =~ m/href=\\\"?([^\\>\\s\\\"]+)/i) {
    $newloc = \"$location/$1\";
# html file for example with frames
    } elsif ($line =~ m/=\\\"?([^\\>\\s\\\"]+html?)/i) {
    $newloc = \"$location/$1\";
    }
    if ($newloc =~ /\\.(pdf|ps)/) {
    print STDERR \"avoiding file $newloc\\n\";
    } elsif  ($newloc =~ /mailto\\:/) {
    print STDERR \"avoiding file $newloc\\n\";
    } elsif ($newloc) {
    $newlevel = $level-1;
    system(\"webcollect4.pl $newloc $newlevel\");
    }
}

print @contents;
   
------------------------------------------------------
b. Consider the regular expressions in the following 
  two lines:
   
    if ($line =~ m/href=\\\"?(http:[^\\>\\s\\\"]+)/i) {
    elsif ($line =~ m/href=\\\"?[.]\\/([^\\>\\s\\\"]+)/i) {

For each of these regular expressions:
  -Describe exactly what it matches
  -Give a line that would match it



Avatar billede davidnielsen Nybegynder
14. december 2001 - 12:36 #1
Check : http://www.eksperten.dk/spm/146346

That\'s exactly the same questions.
Avatar billede alvion Nybegynder
14. december 2001 - 12:50 #2
Avatar billede maksi Nybegynder
15. december 2001 - 17:43 #3
Til davidnielsen
Det er rigtigt. Jeg kan se spørgsmål a er det samme. Men spøgsmål b er anderledes. Kan du svare på spørgsmål b.
Avatar billede maksi Nybegynder
15. december 2001 - 17:46 #4
To Alvion

I can see that it is the same question. But do you have any answer to the question.
Thank you
Avatar billede alvion Nybegynder
15. december 2001 - 18:59 #5
Yes of course :-)

a)
The script retrieves a webpage based on a url and prints the contents. It also finds all the links on this page and calls itself to retrieve all the webpages that these links point to (it is \"recursive\").

The script takes two arguments. The first is a location of a webpage, and the second is how \"deep\" the recursion should go. This last value is decremented by one for each level of subpages that is shown. The script terminates its recursion when it reach 0.

b)
$line =~ m/href=\\\"?(http:[^\\>\\s\\\"]+)/i;
This line matches an absolute url reference, starting with the protocol \"http:\". It matches from the string \"href\" used in the <A> tag. It could match the following strings:

href=\"http://www.sarum.dk\" or
href=http://www.sarum.dk

$line =~ m/href=\\\"?[.]\\/([^\\>\\s\\\"]+)/i;
This line matches a relative url, ie. one that does not start with the protocol. Otherwise it has the same properties as the other. It will match:

href=\"./index.htm\" or
href=./folder1/folder2/index.htm

None of them are foolproof though. They will eg. match this

href=\"http://www.sarum.dk

which is not a valid html format. If you begin your value-field with a quotation (\"), it should also end with one.

Og så vil jeg gerne høre hvorfor det er, at jeg svarer på engelsk?
Avatar billede maksi Nybegynder
15. december 2001 - 20:08 #6
Til Alvion

Jeg siger mange tak for dit svar. Det er bestemt noget jeg kan bruge. Det har hjulpet til forståelsen af PERL/regular expressions. Jeg foretrak engelsk, fordi bogen som jeg læser er på engelsk. Jeg tænkte måske det var nemmere på den måde.
Jeg vil gerne tildele dig de 250 point, men jeg er ikke sikker på, hvordan jeg gøre det.
Tak endnu en gang:)   
Avatar billede alvion Nybegynder
16. december 2001 - 07:36 #7
Jeg skriver et svar og du accepterer det. :-)
Avatar billede maksi Nybegynder
16. december 2001 - 14:13 #8
Til alvion

jeg tildeler de 250 point :)
Avatar billede alvion Nybegynder
16. december 2001 - 18:43 #9
Takker :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester