(1 and 2) For example:
use strict;
#
# h3q1.pl
# Bun Yue August 16, 2000
#
testReverseList();
exit 0;
#
# Deep reversal of elements in a list.
#
sub reverseList {
my @in = @_;
my @result = ();
foreach my $element (@in)
{
if (ref $element eq "ARRAY") {
my @temp = reverseList(@$element);
unshift @result, \@temp;
}
else {
unshift @result, $element;
}
}
@result;
}
#
# Return a string represent a list that may
contain
# element of array reference and scalar.
#
sub deepListContents {
"(" . deepListElementContents(@_)
. ")";
}
sub deepListElementContents {
my $result = "";
my @in = @_;
foreach my $element (@in)
{
if (ref($element) eq "ARRAY") {
$result .= "[" . deepListElementContents(@$element) . "], ";
}
else {
$result .= "$element, ";
}
}
$result =~ s/, $//;
$result;
}
sub testReverseList {
my @in = (1, 2, ["a",
"b", [], [3, 4, [6]], "c"], 45);
print "Original list:\n";
print deepListContents(@in);
print "\nReversed list:\n";
print deepListContents(reverseList(@in));
}
(3) For example,
use strict;
use LWP::Simple;
use LWP::UserAgent;
use URI;
use HTML::LinkExtor;
#
# h3q3.pl
# Bun Yue August 16, 2000
#
@ARGV < 1 && die "Usage: h2q3.pl url\n";
# Get URL.
my $url = $ARGV[0]; # Input url
my $urlContents = ""; # Contents of
input url.
my $baseDNS = ""; # Base DNS
of the url.
$urlContents = get($url) || die "Error: invalid
URL.\n";
# Get base directory.
$url =~ /http:\/\/([^\/]*)/;
my $baseDNS = $1;
# Parse a links.
my @links = ();
my $parser = HTML::LinkExtor->new;
$parser->parse($urlContents);
my @parsedTags = $parser->links();
foreach (@parsedTags) {
my ($tag, %attr) = @$_;
push(@links, $attr{'href'})
if $tag eq 'a';
}
# Process links.
my %numLinks = ();
foreach (@links) {
next if (/^mailto:/);
if (/^http:/) {
/http:\/\/([^\/]*)/;
$numLinks{$1}++;
}
else {
$numLinks{$baseDNS}++;
}
}
# Print result:
print "For the page in the URL $url:\n";
print "the following domains are accessed:\n\n";
foreach (sort keys %numLinks) {
print "$_: $numLinks{$_}.\n";
}
exit 0;