Comment puis-je extraire un nom de fichier d'un chemin en utilisant Perl?
J'ai une variable Perl-je remplir à partir de la base de données. Son nom est $path
. J'ai besoin d'obtenir une autre variable $file
qui a juste le nom de fichier dans le chemin.
J'ai essayé:
$file = $path =~ s/.*\///;
Je suis très nouveau à Perl.
source d'informationauteur JUAN
Vous devez vous connecter pour publier un commentaire.
Pourquoi réinventer la roue? Utiliser le File::Basename module:
Pourquoi
$file=$path=~s/.*\///;
pas de travail?=~
a plus la préséance que=
Donc
est traitée comme:
qui ne le remplacement, dans
$path
et affecte1
(en cas de remplacement) ou''
(si pas de remplacement se produit).Ce que vous voulez, c'est:
qui affecte la valeur de
$path
à$file
et puis ne le remplacement, dans$path
.Mais il y a encore beaucoup de problèmes avec cette solution:
Il est incorrect. Un nom de fichier dans Unix (pas sûr à propos de Windows) peut contenir de saut de ligne. Mais
.
par défaut ne correspond pas à un retour à la ligne. De sorte que vous aurez à utiliser uns
modificateur de sorte que.
correspond à un saut de ligne:Plus important encore, il n'est pas portable, comme c'est en supposant que
/
est le séparateur de chemin qui n'est pas le cas avec certaines plates-formes comme Windows (qui utilise\
), Mac (qui utilise:
). Il faut donc utiliser le module et de le laisser gérer tous ces problèmes pour vous.Vérifier le lien ci-dessous pour une description détaillée sur la façon dont il fonctionne:
http://p3rl.org/File::Basename
Chemin D'Accès::Classe peut sembler excessif au premier abord—fabrication d'objets de fichier et de dir des chemins, mais il peut vraiment payer compliqué scripts et offre de nombreux bonus qui permettront de prévenir spaghetti lorsque vous obtenez soutenu dans un coin de portée fluage. File::Spec est utilisé dans le premier exemple pour le plaisir de résoudre chemin.
Je pense que la meilleure façon de le faire, c'est -
Donc la variable
$file_name
aurez le nom de votre script