Hoe de naam te krijgen van het Perl-script dat wordt uitgevoerd

Hoe kom ik aan de naam van het script?

Ik heb bijvoorbeeld een Perl-script met de naam XXX.pl. Dit bestand bevat:

$name = #some function that obtains the script's own name
print $name;

Uitvoer:

XXX.pl

Ik zou dit willen vergelijken met de CWD-functie die de scriptmap ophaalt. Ik heb een functie nodig die ook de naam van het script verkrijgt.


Antwoord 1, autoriteit 100%

De naam van het lopende programma is te vinden in de variabele $0:

print $0;

man perlvarvoor andere speciale variabelen.


Antwoord 2, autoriteit 56%

use File::Basename;
my $name = basename($0);

PS. getcwd()en vriendenniet geef je de directory van het script! Ze geven je de werkmap. Als het script in je PATH staat en je noemt het gewoon bij naam, niet bij het volledige pad, dan zal getcwd()niet doen wat je zegt. Je wilt dirname($0)(dirname staat ook in File::Basename).


Antwoord 3, autoriteit 14%

Misschien ben je ook geïnteresseerd in meer informatie over __FILE__en mogelijk __LINE__, waarmee je de huidige regel krijgt die ik vaak samen gebruik.

Als je dit wilt voor het opsporen van fouten, wil je misschien ook meer weten over “warn“, “Carp“, “caller” .


Antwoord 4, autoriteit 6%

Bekijk module FindBin, onderdeel van de kerndistributie van Perl. Het exporteert variabelen waarnaar u op zoek bent

 EXPORTABLE VARIABLES
        $Bin         - path to bin directory from where script was invoked
        $Script      - basename of script from which Perl was invoked
        $RealBin     - $Bin with all links resolved
        $RealScript  - $Script with all links resolved

Antwoord 5

Een beetje laat met dit antwoord, maar er is een andere manier van de Perl-omgeving hash %ENV. En aangezien dit de enige nuttige pagina was die naar voren kwam toen ik zocht, zal ik hier mijn weg toevoegen voor mensen uit de toekomst.

$ENV{'SCRIPT_FILENAME'} biedt het volledige pad naar het script dat u uitvoert /var/www/cgi-bin/perlscript.pl

$ENV{'SCRIPT_NAME'}levert het chroot-pad /cgi-bin/perlscript.pl

Als u alle omgevingsvariabelen wilt zien die uw systeem biedt, gebruikt u de volgende code:

foreach $key (sort(keys(%ENV)))
{
   printf("%16s : %s\n", $key, $ENV{$key});
}

Ik gebruik die lus vrij vaak wanneer ik een nieuwe omgeving onderzoek.

De reden dat ik deze vraag lees, is omdat mijn werk ActiveState Perl gebruikt en ze de bestandsnaam van het script niet in de omgevingshash geven, dus ik probeerde andere manieren te vinden om het te krijgen. Van alle antwoorden was de enigedie in onze omgeving werkte de __FILE__ die hierboven vermeld staat.

Other episodes