• Publicidad

Ejecutar script a pelo

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

Ejecutar script a pelo

Notapor trujin » 2009-01-04 13:06 @587

Hola,

Llevo poco tiempo dándole a Perl y cada día me gusta más, pero llevo unos días con una duda para un proyecto y hoy buscando os he encontrado, a ver si sabéis responderme.

La cosa es que he hecho un script y quiero ejecutarlo por consola a pelo, o sea poniendo solo el nombre del script, supongo que tiene que ser una cosa de permisos, pero no estoy muy inspirado estos días, ya le he dado permiso para que se ejecute como programa y nada, lo único que consigo es ejecutarlo poniéndole delante "./", pero así no me sirve.

Y otra cosa más, ¿cómo podría definir una matriz de lo que sea, pongamos 2x2, vacía?

¡Muchas gracias!
trujin
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2009-01-04 12:53 @578

Publicidad

Notapor creating021 » 2009-01-04 13:28 @603

la cosa es que he hecho un script y quiero ejecutarlo por consola a pelo, osea poniendo solo el nombre del script, supongo que tiene que ser una cosa de permisos, pero no estoy muy inspirado estos dias, ya le he dado permiso para que se ejecute como programa y nada, lo unico que consigo es ejecutarlo poniendole delante "./", pero asi no me sirve.

Si estás en Unix, tienes unas cuantas soluciones:
  • Puedes copiar el script (ejecutable) en algún directorio que esté en el path de ejecución como /usr/local/bin
  • Puedes hacer un alias modificando el profile de tu shell preferida, por ejemplo:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using bash Syntax Highlighting
    echo 'alias mi_programa="perl /path/mi_programa.pl"' >> ~/.bash_profile
    Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
  • Crea un directorio en tu $HOME y modifica el $PATH
Y otra cosa más, como podria definir una matriz de lo que sea, pongamos 2x2, vacia?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 my $x = 2;
my $y = 2;
my @matriz = map { (undef) x $x } 1..$y;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Aunque... no le veo mucha utilidad.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2009-01-04 15:07 @672

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

Si dices que tienes que poner './' delante del programa, eso es que le estás indicando al shell dónde se encuentra tu programa, debido a que no ha podido encontrarlo consultando la variable de entorno $PATH (suponemos que estás en Linux/Unix).

Puedes:
* Mover el programa a un directorio indicado por $PATH
* Modificar la variable $PATH en alguno de los scripts de arranque (por ejemplo .bashrc) para que busque en el directorio donde reside el programa. Lo tradicional es que en el .bashrc o en el .profile del usuario o del sistema se agregue la dirección ~/bin, indicando que una posible localización del programa sea el directorio bin del usuario. Otra opción (NO RECOMENDABLE SI ERES root DEL SISTEMA) es agregar la dirección '.', que se refiere a 'el directorio actual'. Por ejemplo: export PATH=.:$PATH Con esto, le indicamos al shell que el primer sitio donde debe mirar en la búsqueda del programa es en el mismo directorio donde te encuentras. Esto es lo más cómodo (pero también lo más peligroso si eres root).
* Ejecutar el programa indicando todo el camino: /home/trujin/desarrollo/perl/programa.pl

Naturalmente, también le has dado permisos de ejecución, para no tener que anteponer el intérprete 'perl' delante. Y en la primera línea del programa, poner la línea el shebang.

Más información en perlrun.

En cuanto a la pregunta de crear una matriz vacía... no creo que tenga mucho sentido, en Perl...

Puedes hacer esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Data::Dumper;

my @tabla = (
    [ '', '' ],
    [ '', '' ],
);

print Dumper \@tabla;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sale:
Código: Seleccionar todo
$VAR1 = [
          [
            '',
            ''
          ],
          [
            '',
            ''
          ]
        ];
pero ya te digo que no hace falta...

Por ejemplo, podríamos hacer un programa así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
$tabla[1][0] = "Hola";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y es perfectamente legal: Perl crea la variable @tabla de forma automática.

¿Por qué lo necesitas?
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 trujin » 2009-01-04 18:50 @826

Entonces si quisiera modificar .profile ¿qué y dónde tendría que ponerlo? Os pego lo que tengo en .profile:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo de la matriz vacía lo decía, porque tengo que hacer una matriz 9x9 poniéndole un 1 en el centro y de aquí de forma aleatoria seguir incrementándolo en los huecos vacíos.

¡Muchas gracias otra vez!
trujin
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2009-01-04 12:53 @578

Notapor creating021 » 2009-01-04 21:02 @918

Con un editor de texto, abre .bashrc (en la raíz de home) y pon un alias:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
alias myprograma="/path/al/programa"
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2009-01-04 21:25 @934

Tu .profile ya te dice lo que tienes que hacer: en la segunda parte se comprueba si el usuario tiene un directorio bin/ dentro del $HOME del usuario, y si es así, lo agrega al $PATH.

Bueno, pues entonces puedes colocar tu programa ahí.

O agregas una línea más indicando dónde van a residir tus programas. Depende de lo que quieras hacer. Si lo que quieres es que se pueda ejecutar en el directorio donde estás, entonces agregas la línea
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
PATH=".:$PATH"
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y lo de la matriz: me sigue intrigando porque estoy empezando a sospechar qué es lo que quieres hacer. Te pongo un ejemplo en puro Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

## Mi matriz
my @matriz;

## Inicializamos el '1' central
$matriz[1][1] = 1;

## Hacemos un bucle infinito
while ("para siempre") {

    ## Pintamos la matriz
    for my $i ( 0 .. 2 ) {
        for my $j ( 0 .. 2 ) {
            printf "[%02d]", $matriz[$i][$j] || 0;
        }
        print "\n";
    }
    print "\n";

    ## Esperar pulsación del usuario
    print "Pulse Enter para la siguiente:";
    <>;

    ## Selección de la posición, de forma aleatoria
    my $x = int rand 3;
    my $y = int rand 3;

    ## Incrementamos el valor de la celda
    $matriz[$x][$y]++;
}

__END__
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 trujin » 2009-01-05 06:12 @300

Por fin he podido solucionarlo metiendo le un alias en bashrc, ¡muchas gracias a los dos!

Lo de la matriz, explorer, te explico lo que tengo que hacer xD

Dada una matriz 9x9, colocar un 1 en medio, y como si fuera una mesa de ajedrez, desde el 1 hacer movimientos de caballo aleatorios y donde caiga poner un 2, luego un 3 ..., hasta que en algún momento vaya a colocar un número en una casilla llena y ahí termina.
trujin
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2009-01-04 12:53 @578


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron