2013-03-18 4 views
0

Dire que j'ai un tableau qui présente les données ci-dessousRechercher et remplacer dans un tableau

@array = ('/root/level1','/root/level2', 
      '/root/level1/level2','/root/level1/level2/level3') 

Je veux boucler sur ce tableau et de remplacer chaque élément avec son dernier mot comme

@array = ('level1','level2','level2','level3') 

I Je ne suis pas bon avec regex, quelqu'un peut-il m'aider?

Répondre

5

Split et carte utilisant:

@array=map{(split(/\//,$_))[-1]}@array; 

utilisant l'expression rationnelle:

@array=map{m|.*/(.*)|}@array; 
+0

travaillé, merci. –

3

Pourquoi utiliser regex quand vous avez le module File::Basename pour faire le travail pour vous. Il est un module de base en Perl 5.

use strict; 
use warnings; 
use Data::Dumper; 
use File::Basename; 

my @array = ('/root/level1', 
      '/root/level2', 
      '/root/level1/level2', 
      '/root/level1/level2/level3'); 

@array = map basename($_), @array; 
print Dumper \@array; 

sortie:

$VAR1 = [ 
      'level1', 
      'level2', 
      'level2', 
      'level3' 
     ]; 
+0

En fait, le tableau que je possède ne contient pas de chemins de fichier, ce sont des noms simples qui ressemblent à des chemins mais ils ne le sont pas. Je vais donc préférer utiliser regex. –

+0

Pensez-vous que les regex utilisent des règles différentes de ce module? – TLP