Thread In zwischenablage kopieren (19 answers)
Opened by guertelschnalle2 at 2011-12-05 15:16

topeg
 2011-12-05 18:42
#154669 #154669
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Also ein wenig grundlegendes zu Modulen.

Für Perl ist ein Module erst mal Code, der geladen wird und vor dem restlichen Code im Script ausgeführt wird. (Es ist noch ein ganz klein wenig mehr, aber bleiben wir vorläufig dabei.)

Wenn du schreibst "use foo::bar" macht Perl im Hintergrund:

  • wandle "::" in "/" hänge ein ".pm" an
    Code (perl): (dl )
    1
    2
    
    my $pm_path="$pm_name.pm";
    $pm_path=~s#::#/#gs;
  • Suche in "@INC" (Include Pfade) nach einer Datei, die den Pfad und Namen hat
    Code (perl): (dl )
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    my $full_pm_path='';
    for my $base_path (@INC)
    {
      if(-f "$base_path/$pm_path")
      {
        $full_pm_path="$base_path/$pm_path";
        last;
      }
    }
    return 0 unless($full_pm_path);
  • versuche den Code auszuführen
    Code (perl): (dl )
    1
    2
    3
    4
    
    open(my $pm_fh,'<',$full_pm_path) or return 0;
    local $/=undef;
    my $code=<$pm_fh>;
    return eval($code);

Das erklärt schon ziemlich genau was du mit Modulen zu tun hast. Bedenke aber dass einfaches kopieren nur mit Modulen funktioniert, die nur Abhängigkeiten zu Code-Modulen und keinen Binäranteil haben (pure perl => "PP").

Schaue in "@INC" wo du Module ablegen kannst, damit sie gefunden werden: print "INC Pfade:".join("\n",@INC)."\n"
suche dir eines aus, in das du problemlos schreiben kannst ("." der aktuelle Arbeitspfad ist immer eines der Pfade).
Kopie das Modul mit dem richtigen Pfad dorthin (bedenke "::" wird "/").

Du kannst mit use lib "/pfad/zu/ordner"; weiter Pfade in @INC einfügen.

EDIT: use lib nicht use base
Last edited: 2011-12-06 10:31:57 +0100 (CET)

View full thread In zwischenablage kopieren