Title: RE: [Perl-unix-users] Problems with URI;

I agree with Bill. In fact if you are on Unix using single quotes will protect your command line parameters from the shell altogether. Using double quotes allows variable substitution as in "open $file output" will evaluate the shell variable named $file. Also back tick command substitution is performed. This is useful if you wish to pass the output of another command into your command line.

Hope this is of use.

Steve

-----Original Message-----
From: $Bill Luebkert [mailto:[EMAIL PROTECTED]]
Sent: Thursday, November 29, 2001 7:52 AM
To: Michael Wray
Cc: [EMAIL PROTECTED]
Subject: Re: [Perl-unix-users] Problems with URI;


Michael Wray wrote:

> Hello,
>
> I am writing a redirector script for SQUID, and when I use URI to parse
> the URL, URI is not functioning the same in "redirector" mode as it is
> under command line mode...
>
> i.e. The only difference is where the URL is coming from..and URI
> doesn't appear to fully function, here is the code:

> At any rate all those strings are empty in the first method passed the
> exact same string..
>
> Any CLues?


It could be your shell is having trouble with the wildcard chars, try
quoting the URL:

myscript.pl "http://www.playboy.com/somepath/somedoc.html?var=some&var2=else"

Rewrote the code to:

use URI;

# MAIN URI Doesn't WORK Right
# Errors out with:Cannot find Method{host} in _generic.
# Nothing is parsed correctly...

$| = 1;
my $debug = 1;

if (0) {                        # set to 1 to test this method

while (<STDIN>) {       # is your intent to pass filenames as args here ?
                        # or to read from STDIN ?
#
my @X = split;
#
my $url = $X[0];

        chomp;
        my $url = $_;
        print "url='$url'\n";

        my @url_array = parse_url ($url);
        my %url_hash;
        @url_hash{'scheme', 'opaque', 'authority', 'path', 'fragment', 'host',
          'query'} = @url_array;
        print "The contents of @url_array" if $debug;

        my $mask = do_lookup ($url_hash{host});
        if ($mask > 0) {
                print "http://auth1.s4f.com/blocked.asp\n";
        } else {
                print "$url\n";
        }
        exit;
}

}       # end reading from STDIN method

# MAIN URI Works
# same program but instead of taking input from STDIN, takes input from
# command line..same input..a URL. even prints the same

my $url = $ARGV[0];
my @url_array = parse_url ($url);
my %url_hash;
@url_hash{'scheme', 'opaque', 'authority', 'path', 'fragment', 'host',
   'query'} = @url_array;
print "The contents of @url_array" if $debug;

my $mask = do_lookup ($url_hash{host});
if ($mask > 0) {
        print "http://auth1.s4f.com/blocked.asp\n";
} else {
        print "$url\n";
}

# Parse URL

sub parse_url {
        my $URL = shift;

print STDERR "URL=$URL\n" if $debug;

my $u = URI->new($URL);
print &Data::Dumper::Dumper(\$u);
my $scheme = $u->scheme;
my $opaque = $u->opaque;
my $authority = $u->authority;
my $path = $u->path;
my $fragment = $u->fragment;
my $host = $u->host;
my $query = $u->query;
my @response = ($scheme, $opaque, $authority, $path, $fragment, $host, $query);

print STDERR "scheme=$scheme\n" if $debug;
print STDERR "opaque=$opaque\n" if $debug;
print STDERR "authority=$authority\n" if $debug;
print STDERR "path=$path\n" if $debug;
print STDERR "fragment=$fragment\n" if $debug;
print STDERR "host=$host\n" if $debug;
print STDERR "query=$query\n" if $debug;

return @response;

}

sub do_lookup {
        my $mask = 0;
# Do SOME STUFF TO Find a mask for the URL.
return $mask;

}

__END__




--
   ,-/-  __      _  _         $Bill Luebkert   ICQ=14439852
  (_/   /  )    // //       DBE Collectibles   Mailto:[EMAIL PROTECTED]
   / ) /--<  o // //      http://dbecoll.tripod.com/ (Free site for Perl)
-/-' /___/_<_</_</_     Castle of Medieval Myth & Magic http://www.todbe.com/

_______________________________________________
Perl-Unix-Users mailing list. To unsubscribe go to http://listserv.ActiveState.com/mailman/subscribe/perl-unix-users

Reply via email to