Su navegador no es capaz de visualizar correctamente esta página.


martes, mayo 16, 2006

Script ''de Rafa''

Script amb colorets i comentaris:

#!/usr/bin/perl

# comprova si tot es estritament correcte, i si no, dona error
use strict;
# escriu avisos si algo no esta clar de tot
use warnings;

# carrega la capcalera Socket del grup IO
# funciona com #include <arxiu.h> en C
use IO::Socket;

# canvia el tipus d'entrada a "no-bloquegant"
# aixi en la linia my $tmp = <STDIN> no espera entrada alguna abans de continuar
STDIN->blocking(0);

my ($secs, $mins, $hour, $day, $mo, $year) = localtime (time);
my $tempo = localtime (time);
my $total = 0;

printf "Cámara de seguridad en marcha\n" .
     "Inicio de la captura de imágenes: $tempo\n" .
     "Presiona Ctrl+C durante dos segundos para detener la cámara.\n" .
     "Capturando:\n";

# un for sense condisio s'executa infinitament
for (my $j = 0;; $j++) {
     ($secs, $mins, $hour, $day, $mo, $year) = localtime (time);
     my $dir = "archivo$hour";
     my $file = "$dir/imagen$hour:$mins:$secs.jpg";

     # funcio system te dos modes de passar arguments
     # primera es ficar-ho tot (executable i arguments) en una variable de text
     # segon es passar una llista a on el primer camp es el executable i altres
     # son els seus arguments
     # primer metode es pitjor, ja que separa un argument de l'altre on hi
     # han espais en blanc, per aixo no es pot passar arguments amb espai,
     # a mes per a fer-ho crida a shell
     # segon metode funciona directament i molt millor, no necessita shell

     # qw() crea una llista del text que hi ha dins dividint en llocs oh ni han
     # espais en blanc;
     # NO ES UNA FUNCIO ! '(' i ')' son simplement limitadors qw// funciona igual
     system qw(gqcam -v /dev/video0 -d imagen -t JPEG);
     system "mkdir", $dir unless -d $dir;
     system "cp", "imagen", $file;
     my $size = (stat "imagen" )[7] / 1024;
     $total += $size;
     printf "%.2i:%.2i:%.2i Imagen: $j,  Espacio ocupado %iKB," .
             " total: %iKB        \r",
             $hour, $mins, $secs, int $size, int $total;

     # llig la entrada estandar
     if ( my $tmp = <STDIN> ) {
             # comprova si apareix 'q'
             exit 0 if $tmp =~ /q/;
     }

     sleep 1;
}
Com és que he tingut temps i ganes ficar-ho tot amb colorets explicare en un altre post. Stay tuned !

No hay comentarios: