2011-11-24 21 views

Respuesta

22

Ver perldoc -f index:

$x = "hello.world"; 
$y = substr($x, 0, index($x, '.')); 
+3

No quise decir la referencia perldoc como un "RTFM" sino como un "Para obtener más información, vea: ____". :) –

5

Usando substr:

my $string = "hello.world"; 
my $substring = substr($string, 0, index($string, ".")); 

O usando expresiones regulares:

my ($substring2) = $string =~ /(.*)?\./; 
+1

's/substring/substr/g' –

+0

@JimDavis gracias – yko

+1

El substr dará la cadena hasta el * primer * punto' .', la expresión regular dará la cadena hasta el * último * período. Tenga en cuenta la diferencia. Use '. *?' Para expresiones regulares no codiciosas para obtener la misma funcionalidad. – TLP

1
use strict; 
use warnings; 

my $string = "hello.world"; 
my $dot = index($string, '.'); 
my $word = substr($string, 0, $dot); 

print "$word\n"; 

le da hello

+0

para WORLD; my $ world = substr ($ cadena, $ punto, longitud ($ cadena)); – Hariboo

1

Otra posibilidad:

my $string = 'hello.world'; 
print ((split /\./, $string)[0], "\n"); 
1

En el espíritu de TIMTOWTDI, y la introducción de nuevas características: Uso de la non-destructive option/r

my $partial = $string =~ s/\..*//sr; 

El codicioso .* final va a cortar todo después del primer período, incluyendo posibles caracteres de nueva línea (opción /s), pero mantenga intacta la cadena original y elimine la necesidad de parens para imponer el contexto de la lista (opción /r).

Presupuesto de perlop:

Si la opción/r (no destructivo) se utiliza a continuación, se ejecuta la sustitución en una copia de la cadena y en lugar de devolver el número de sustituciones, devuelve la copia, haya ocurrido o no una sustitución . La cadena original nunca cambia cuando/r es usado. La copia siempre será una cadena simple, incluso si la entrada es un objeto o una variable vinculada.

Cuestiones relacionadas