J'ai ce code pour imprimer le répertoire actuel en utilisant Perl:
use Cwd qw(abs_path);
my $path = abs_path($0);
print "$path\n";
Mais il affiche le nom du fichier de mon script avec le répertoire.
Comme ça:
C:\Perl\duration.pl
Je veux seulement afficher C:\Perl\
.
Comment puis-je le faire?
Chacun des extraits suivants obtient le répertoire du script, qui est différent du répertoire actuel. On ne sait pas lequel vous voulez.
use FindBin qw( $RealBin );
say $RealBin;
ou
use Cwd qw( abs_path );
use File::Basename qw( dirname );
say dirname(abs_path($0));
ou
use Cwd qw( abs_path );
use Path::Class qw( file );
say file(abs_path($0))->dir;
Pour obtenir le répertoire de travail actuel (pwd
sur de nombreux systèmes), vous pouvez utiliser cwd()
au lieu de abs_path
:
use Cwd qw();
my $path = Cwd::cwd();
print "$path\n";
Ou abs_path
sans argument:
use Cwd qw();
my $path = Cwd::abs_path();
print "$path\n";
Voir le Cwd docs pour plus de détails.
Pour obtenir le répertoire dans lequel se trouve votre fichier Perl, procédez comme suit:
use File::Basename qw();
my ($name, $path, $suffix) = File::Basename::fileparse($0);
print "$path\n";
Voir le File :: Basename docs pour plus de détails.
Utilisation:
print($ENV{'PWD'});
Mais je pense que ça ne marche pas sous Windows ...
Il suffit de retirer le '$ 0'
use Cwd qw(abs_path);
my $path = abs_path();
print "$path\n";
Voici une solution simple:
use Cwd;
my $cwd = cwd();
print "Current working directory: '$cwd()'";
J'espère que cela aidera.
Vous pouvez utiliser FindBin
:
use FindBin '$RealBin';
print "$RealBin\n";
FindBin
est un module standard installé lorsque vous installez Perl. Pour obtenir une liste des pragmatiques et modules standard, voir perldoc perlmodlib
.
J'ai utilisé mon script dans des répertoires avec des liens symboliques . Le script analyse le chemin et exécute les commandes en fonction du chemin .. .. J'ai été confronté à la détermination correcte du chemin actuel.
Voici un exemple:
root@srv Apache # pwd
/services/Apache
root@srv Apache # readlink -f .
/services/Apache2225
Chemin des divulgations de module Cwd (analogue de readlink -f) http://perldoc.Perl.org/Cwd.html
root@server Apache # Perl -e 'use Cwd; print cwd . "\n";'
/services/Apache2225
Si vous devez obtenir le chemin actuel comme pwd, vous pouvez utiliser $ ENV {'PWD'}
root@srv Apache # Perl -e 'use Cwd; print $ENV{'PWD'}."\n";'
/services/Apache
Je vous remercie.