anoniem Geplaatst: 30 november 2002 Delen Geplaatst: 30 november 2002 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)? Quote Link naar reactie
anoniem Geplaatst: 3 december 2002 Auteur Delen Geplaatst: 3 december 2002 [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. Quote Link naar reactie
anoniem Geplaatst: 3 december 2002 Auteur Delen Geplaatst: 3 december 2002 [hongli@izumi hongli]$ echo 'print $0, "\n";' > test.pl [hongli@izumi hongli]$ perl -w ./test.pl ./test.pl [hongli@izumi hongli]$ Dat werkt niet... Quote Link naar reactie
anoniem Geplaatst: 3 december 2002 Auteur Delen Geplaatst: 3 december 2002 [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. Quote Link naar reactie
anoniem Geplaatst: 3 december 2002 Auteur Delen Geplaatst: 3 december 2002 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. Quote Link naar reactie
anoniem Geplaatst: 3 december 2002 Auteur Delen Geplaatst: 3 december 2002 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. Quote Link naar reactie
anoniem Geplaatst: 29 januari 2003 Auteur Delen Geplaatst: 29 januari 2003 [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. Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen