Vraag & Antwoord

Programmeren

[Perl] Script verdelen over meerdere bestanden

6 antwoorden
  • 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)?
  • [b:bc9f5f892b]$0[/b:bc9f5f892b] geeft je pad+filename van je script. Ik ben geen perl programmeur, maar het idee is dat je de scriptnaam eraf stript, het restant in een variabele (bv path) zet en dan [i:bc9f5f892b]require "$path/foobar.pm"[/i:bc9f5f892b] gebruikt. Hoop dat het helpt.
  • [hongli@izumi hongli]$ echo 'print $0, "\n";' > test.pl [hongli@izumi hongli]$ perl -w ./test.pl ./test.pl [hongli@izumi hongli]$ Dat werkt niet...
  • [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.
  • 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.
  • 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.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.