• Publicidad

Unir variable con texto!

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Unir variable con texto!

Notapor Guille » 2007-02-07 14:20 @639

Hola a todos nuevamente, tengo un problema que seguramente es de fácil solución pero he probado varias alternativas pero no me han funcionado. El problema que es cuando quiero unir de una manera parecida a esta: $usuario[4] .tar.gz no me funciona imprime todo como si el punto fuera el final de la línea.

Sale más o menos así.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#(mas código)

@dominios=`grep -l OWNER=$rv /sistema/users/*`;
foreach $a(@dominios)
{
@usuario=split(/\//,$a);
print ("/home/$usuario[4].tar.gz");

#(más código)
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Y en vez de salirme todos los usuarios de la manera:

Código: Seleccionar todo
/home/usuario.tar.gz
/home/usuario1.tar.gz
/home/usuario2.tar.gz


Me lo devuelve de la manera:

Código: Seleccionar todo
/home/usuario
.tar.gz/home/usuario1
.tar.gz/home/usuario2


¡Y el problema que tengo que esto es que después el /home/usuario.tar.gz lo utilizo para otras cosas que no me funcionan!.

¡¡¡Muchísimas gracias por su ayuda como siempre!!!.

Guille
:D
Avatar de Usuario
Guille
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2006-05-31 13:30 @604
Ubicación: Argentina

Publicidad

Notapor kidd » 2007-02-07 14:28 @644

Hola:

No debería hacer eso, pero para más seguridad usa el operador de concatenación (.):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    print  "/home/" . $usuario[4] . ".tar.gz";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora, también el problema podría estar en que el array @usuario no tiene los valores que quisieras, te convendría verificar eso.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor kidd » 2007-02-07 14:30 @646

Leyendo de nuevo tu mensaje, el problema realmente es que tu array lo más seguro es que lo estás tomando de un archivo, por lo que tienen el newline al final \n, una solución es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print  "/home/" . chomp($usuario[4]) . ".tar.gz";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2007-02-07 15:41 @695

Efectivamente, el fallo estará en el final de línea.

Pero lo que no se puede hacer es usar chomp() dentro de una operación, porque lo que devuelve no es la expresión recortada sino el número de caracteres eliminados.

Hay que hacer el corte antes.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach $a ( @dominios ) {
    @usuario = split(/\//, $a);
    chomp($usuario[4]);
    print "/home/$usuario[4].tar.gz";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2007-02-07 18:05 @795

explorer escribiste:Efectivamente, el fallo estará en el final de línea.

Pero lo que no se puede hacer es usar chomp() dentro de una operación, porque lo que devuelve no es la expresión recortada sino el número de caracteres eliminados.

Hay que hacer el corte antes.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach $a ( @dominios ) {
    @usuario = split(/\//, $a);
    chomp($usuario[4]);
    print "/home/$usuario[4].tar.gz";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Tienes razón. Incluso quizá lo más apropiado sería hacerle chomp a $a.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $a ( @dominios ) {
   
    chomp($a);
    my @usuario = split(/\//, $a);

    print "/home/$usuario[4].tar.gz";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor Perl user » 2007-02-07 20:37 @900

Niños, niños... hombre no se peleen por la solución... antes, después, da igual.

Pero para evitar que chomp sea llamado dentro de la iteración, si @dominios no es muy grande (un tamaño considerablemente grande), entonces podemos llamar:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
chomp( @dominios )
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y le dejamos al código nativo de chomp hacer el corte necesario a todos y cada uno de los elementos.

Saludos,[/syntax]
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados