ich möchte in einem Skript, das bei mir lokal läuft (also nicht in einer CGI-Umgebung) eine URL parsen, damit ich die übergebenen Argumente herausbekomme. Geht das mit CGI.pm? Wenn ja, wie? Wie kann ich die URL übergeben?
TIA
Margin-Auto
Query String zu parsen hat einen ähnlichen Schritt wie CGI Input zu parsen.
Hier nur ein Ausschnitt aus dem Fussmarsch.
#!C:/Programme/Perl/bin/perl.exe -w
#
#use strict;
BEGIN {
use CGI::Carp qw(carpout);
open(LOG, ">>error.txt") or die "Unable to append to error.txt: $!\n";
carpout(*LOG);
}
# eine test url
my $url="http:www.example.org/some/path/to.file?par1=A&par1=B&par2=C";
my $query = '';
$url =~ /\?(.*?)(?:#|$)/ and $query = $1;
# wir brauchen einen hash, in welchem wir Daten sammeln:
my %Input = ();
# $query soll gesplittet werden
foreach( split /[&;]/, $query ){
my ($par, $val) = (split /=/, $_, 2);
for($val){
tr/+/ /;
s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
s/\0//g; # enferne \0
s/\cM//g; # entferne \r
}
# Jetzt wird es knifflig:
# Der Simpel würde sagen:
# $Input{$par} = $val;
# was jedoch die Üertragung gleichnamiger Checkboxen verunmöglicht.
# statt dessen bauen wir einen Hash_of_Arrays
# wir müssen erst testen ob der key existiert,
unless( exists $Input{$par} ){
#um einen neuen anonymen Array zu erzeugen
$Input{$par} = [];
}
# an welchen wir nun $val pushen
push @{ $Input{$par} }, $val;
# zugegebenermassen, eine etwas heavy Syntax.
# und immer noch Quick-and-Dirty
}
# Access:
print $Input{par1}[0], "\n";
print $Input{par1}[1], "\n";
print $Input{par2}[0], "\n";
print "\nAll Input Is Evil\n";
sleep(10);
mfg Beat;