Página 1 de 1

Leer variables desde otro script y ejecutarlo

NotaPublicado: 2018-01-31 17:35 @774
por _behoimi
Hola, explicaré lo que hice y mi problema, pero no adjuntaré código, porque en realidad es una pregunta muy básica, pero que no sé cómo formularla de la forma adecuada como para buscarla en Google. Ojalá se entienda sin código.

Creé más de un script que dibuja gráficos, con la ayuda del módulo GD.

Todo se ejecuta bien, no hay error en el código, sino más bien tuve un problema en el tiempo de ejecución.

Primero tenía un script para crear cada gráfico, todos funcionando de forma similar (aunque eran solo dos, ahora necesito hacer al menos uno más), cada uno leía un archivo en donde se almacenan los datos y luego se creaba la imagen, pero ahora el archivo con los datos es demasiado grande, entonces tarda varios minutos en crearse la imagen, así que para reducir el tiempo metí el algoritmo del segundo script en el primero, así de una sola vez se crean los dos gráficos. Con esto el problema del tiempo queda solucionado, podría meter el algoritmo para un tercer gráfico y, supongo, sería un par de segundos más tardado.

Mi verdadero problema es que ahora tengo un enredo con las variables, ya que todas tienen nombre similar y les agregué un "2" para diferenciarlas, me gustaría poder tener solo un script que cargue los datos, pero poder escribir el algoritmo de los gráficos por separado, algo así como un script que ejecute otros dos script, pero que puedan leer las variables del primero.

Re: Leer variables desde otro script y ejecutarlo

NotaPublicado: 2018-01-31 19:09 @840
por explorer
Puedes meter las variables en archivos perl, y luego, desde el principal, los cargas con do:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for my $i (1..3) {
  2.  
  3.     do "variables_$1.pl";
  4.  
  5.     # cálculo usando las variables
  6. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Tienes más información el perldoc -f do:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
    do EXPR Usa el valor de EXPR como el nombre de un archivo y ejecuta los
            contenidos del archivo como un script Perl.

                do 'stat.pl';

            es mayormente como

                eval `cat stat.pl`;

            excepto que es más conciso, no ejecuta procesos externos, mantiene
            el seguimiento del nombre del archivo actual en los mensajes de
            error, busca en los directorios @INC y actualiza %INC si se
            encuentra al archivo. Vea "@INC" in perlvar y "%INC" in perlvar
            para encontrar información sobre estas variables. También difiere
            en que el código evaluado con "do ARCHIVO" no puede ver a las
            variables léxicas en el ámbito en que se ejecuta; "eval STRING"
            sí. Es lo mismo, sin embargo, en que vuelve a interpretar el
            archivo cada vez que lo llama, así que, probablemente, no querrá
            hacer esto dentro de un bucle.

            Si "do" puede leer el archivo pero no puede compilarlo, devuelve
            "undef" y pone un mensaje de error en $@. Si "do" no puede leer el
            archivo, devuelve undef y pone $! al valor del error. Siempre
            revise $@ en primer lugar, la compilación puede fallar de una
            manera que también se establezca $!. Si el archivo se compila
            bien, "do" devuelve el valor de la última expresión evaluada.

            La inclusión de bibliotecas de módulos es mejor hacerla con los
            operadores "use" y "require", que también hacen una comprobación
            automática de errores y generan una excepción si existe algún
            problema.

            Puede usar "do" para leer en un programa un archivo de
            configuración. Comprobación manual de errores se puede hacer así:

                # leer en archivos de configuración: primero el sistema, luego el usuario
                for $archivo ("/share/prog/defaults.rc",
                           "$ENV{HOME}/.algunprogramarc")
                {
                    unless ($devuelve = do $archivo) {
                        warn "no puedo interpretar $archivo: $@" if $@;
                        warn "no puedo ejecutar $archivo: $!"    unless defined $devuelve;
                        warn "no puedo ejecutar $archivo"        unless $devuelve;
                    }
                }
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4