Margin-Auto: URL lokal mit CGI.pm parsen

Hi,

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

  1. 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?

    Ich denke nein, denn CGI.pm setzt hier voraus, dass die entsprechenden CGI-Umgebungsvariablen gesetzt wurden, was bei Konsolenanwendungen nicht der Fall wäre.

    Eventuell hilft Dir aber URI::ParseSearchString weiter.

    Siechfred

    --
    Chancengleichheit bedeutet nicht, dass jeder einen Apfel pflücken kann, sondern dass der Zwerg eine Leiter bekommt.
    1. Hi,

      Eventuell hilft Dir aber URI::ParseSearchString weiter.

      Danke für den Hinweis, aber das ist mir zu speziell. Ich suche keine Suchanfragen sondern Voutube-Video-IDs. Also der v-Parameter in den URLs. Habe es jetzt quick&dirty über eine Regex gelöst.

      $ARGV[0]=~m/v=(.*)&?/i;  
      $videoid=$1;
      

      Margin-Auto

      1. Habe es jetzt quick&dirty über eine Regex gelöst.

        $ARGV[0]=~m/v=(.*)&?/i;

        $videoid=$1;

        
        >   
        > Margin-Auto  
          
        m/v=(.\*)&?/i  
          
        wird mehr als die id matchen, sondern weitere Optionen.  
          
        "v=1&b=2&" =~ m/v=(.\*)&?/i and print $1, "\n";  
          
        Einen Querystring sollte man vorher angemessen behandeln, damit du nicht ein bösses Wunder erlebst, falls Youtube plötzlich den & Separator durch einen ; Separator ersetzt.  
          
        mfg Beat
        
        -- 
        Woran ich arbeite:  
        [X-Torah](http://www.elcappuccino.ch/cgi/tok.pl?extern=1-pub-com3306-1)  
        
        ><o(((°>           ><o(((°>  
        
           <°)))o><                     ><o(((°>o  
        
        
  2. 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;

    --
    Woran ich arbeite:
    X-Torah
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
  3. Bin mir ziemlich sicher das CGI.pm sowas zwecks Debugging von Haus aus unterstützt, schon mal in die perldoc geschaut?

    ... ah ja schau mal, ginge auch so! http://board.perl-community.de/thread/12784/startWithMessage=0

    1. UPDATE: Nach Threaddurchsicht verstehe ich deine Frage besser, CGI.pm wär ziemlicher overkill, wähle  lieber ein spezialisiertes Modul: http://search.cpan.org/search?query=URI&mode=all