Ga naar inhoud

[Perl] Script verdelen over meerdere bestanden


anoniem

Aanbevolen berichten

Ik wil een Perl script verdelen over meerdere bestanden, net als dat ik een Pascal programma kan verdelen over meerdere units, een bash script over meerdere bronnen en een C programma over meerdere .c/.h bestanden. Hoe doe ik dat in Perl? Als ik bijvoorbeeld een bestand FooBar.pm aanmaak en 'require FooBar;' in mijn script zet, dan werkt het, maar alleen als ik die script in dezelfde directory als FooBar.pm uitvoer (anders krijg ik "Can't locate FooBar.pm in @INC"). Is er een betere manier? Is er een manier om achter de volledige bestandsnaam van mijn script te komen (zodat ik de directorynaam van FooBar kan krijgen en @INC kan aanpassen)?
Link naar reactie
[code:1:158d20f03e] #!/usr/bin/perl print "$0\n"; [/code:1:158d20f03e] Filenaam voor dit script is 'second.pl' en staat in /home/wim/bin (die ook in het pad staat). Als ik het script draai met second.pl (vanuit enige directory), krijg ik /home/wim/bin/second.pl Als ik het script draai met ./second.pl (vanuit de bin-directory), krijg ik ./second.pl Dat is precies wat je wilde (bij mijn weten), tenzij ik je vraag niet goed begrepen heb.
Link naar reactie
Nou eigenlijk wil ik de volledige bestandsnaam van mijn script hebben, ongeacht welke commando ik heb gebruikt om hem op te starten. Ik wil dat ie andere scripts in dezelfde directory altijd kan vinden. Dus als ik bijvoorbeeld 1.pl en 2.pl heb in /foo (1.pl heeft 2.pl nodig), en ik verplaats /foo naar /bar, dan wil ik dat 1.pl nog steeds werkt zonder hem handmatig te bewerken.
Link naar reactie
Vergeef me even de fouten in het perl script (ik ken perl totaal niet). Plaats iets zoals hieronder in 1.pl [code:1:a6a4772fe5] $mypath=strip($0); #krijg de directory va 1.pl require "$mypath/2.pl"; #combineer directory met 2.pl [/code:1:a6a4772fe5] Iets in die geest moet werken. De functie strip heb ik ter plaatse bedacht en zou de padnaam moeten retourneren (of evt opslaan in een globale variabele). Deze functie moet je zelf schrijven (er zijn in perl wel functies als substring of zoiets, meen ik vandaag ergens gezien te hebben). Onafhankelijk waarvandaan je dat ding opstart zal mypath het pad bevatten naar 1.pl en dus ook naar 2.pl.
Link naar reactie
  • 1 maand later...
[quote:cd68fca852="RobertV"]Als ik bijvoorbeeld een bestand FooBar.pm aanmaak en 'require FooBar;' in mijn script zet, dan werkt het, maar alleen als ik die script in dezelfde directory als FooBar.pm uitvoer (anders krijg ik "Can't locate FooBar.pm in @INC").[/quote:cd68fca852][code:1:cd68fca852]$ perl -wle 'print for @INC' /usr/lib/perl5/5.6.0/i386-linux /usr/lib/perl5/5.6.0 /usr/lib/perl5/site_perl/5.6.0/i386-linux /usr/lib/perl5/site_perl/5.6.0 /usr/lib/perl5/site_perl . $ perl -M'lib qw(/foo/bar /foo/bar/baz)' -wle 'print for @INC' /foo/bar /foo/bar/baz /usr/lib/perl5/5.6.0/i386-linux /usr/lib/perl5/5.6.0 /usr/lib/perl5/site_perl/5.6.0/i386-linux /usr/lib/perl5/site_perl/5.6.0 /usr/lib/perl5/site_perl . $ perldoc lib[/code:1:cd68fca852] Vooral dat laatste.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...