• Publicidad

Poner "$" como contenido de una variable

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

Poner "$" como contenido de una variable

Notapor tarkano » 2012-08-22 09:41 @445

Hola.

Estoy ejecutando instrucciones por ssh y necesito poner '$' como contenido de una variable y utilizarla en otro script, pero no me acepta. Por ejemplo :

my $var="$";

En especifico, lo que quiero hacer es ejecutar una consulta mediante ssh en un servidor de correo Zimbra, y ejecutar el comando awk para recopilar unos parámetros.

Les adjunto algo del código...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $doble_comilla=""";
  2. $cuenta_mostrar="ronald.rivera";
  3. my $comilla="'";
  4. my $sig= "$";
  5. my $p1=$sig."1";
  6. my $p2=$sig."2";
  7. my $p3=$sig."3";
  8.  
  9. $cos="ssh usuario$servidorZimbra.com $doble_comilla/opt/zimbra/bin/zmprov gqu localhost|awk {$comilla print $doble_comilla $doble_comilla<span style="font-weight: bold">$p1</span>$doble_comilla $doble_comilla<span style="font-weight: bold">$p2</span>/1048576$doble_comilla $doble_comilla<span style="font-weight: bold">$p3</span>/1048576$comilla}|grep $cuenta_mostrar$doble_comilla";
  10. system($cos);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


En conclusión...
En el servidor Zimbra quiero hacer correr el comando:
zmprov gqu localhost|awk {'print " "$1" "$2/1048576" "$3/1048576'}|grep ronald.rivera

El error que sale al ejecutar mi programa es:
Final $ should be \$ or $name at ./crear1 line 99, within string
syntax error at ./crear1 line 99, near "="$""
Execution of ./crear1 aborted due to compilation errors.


Gracias de antemano...

¡Saludos!
tarkano
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-08-22 09:18 @429

Publicidad

Re: Poner "$" como contenido de una variable

Notapor explorer » 2012-08-22 10:37 @484

Bienvenido a los foros de Perl en Español, tarkano.

En Perl, todo aquello que está entrecomillado con dobles comillas, es interpolado, así que cuando Perl se encuentra con "$" lo que en realidad está viendo es el inicio de una cadena entrecomillada doble, y que contiene la variable especial $" seguida de un ';' y del resto del programa hasta las próximas comillas dobles. Un desastre :)

Cuando no queremos que Perl haga esa interpolación, usamos comillas simples:

my $var = '$';

Incluso se pueden poner comillas simples dentro de dobles, y viceversa, pero sabiendo que las dobles siempre interpolan aquello que parece una variable (lo que comience por $ y @, sobre todo).

Existen además los operadores q() y qq() que tienen el mismo efecto que las comillas simples y dobles, pero nos valen para los casos en los que hay muchas comillas dentro de la cadena de texto y no queremos "escaparlas" continuamente.

Así, tu programa se podría escribir como:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $servidorZimbra = 'api1.zimbra.com';
  2. my $ssh = "ssh usuario\@$servidorZimbra ";
  3. my $cmd = q(/opt/zimbra/bin/zmprov gqu localhost|awk {'print " "$1" "$2/1048576" "$3/1048576'}|grep ronald.rivera);
  4.  
  5. system("$ssh $cmd");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Un detalle: system() no devuelve la salida del resultado de la ejecución, así que no podrás capturar el resultado. Para eso, usa qx() en lugar de system().

Más información en perlsyn y perlop.
Última edición por explorer el 2012-08-29 12:37 @567, editado 1 vez en total
Razón: Errores en el código
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

Re: Poner "$" como contenido de una variable

Notapor tarkano » 2012-08-22 10:47 @491

¡¡¡¡ Anduvo joya !!!!

Gracias por la ayuda y los consejos...

¡Saludos!
tarkano
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-08-22 09:18 @429


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 2 invitados

cron