Newsgroup: it.comp.lang.perl
Titolo: RegExp help me!

Premesso che ho già letto di tutto sulle regexp, tutte le volte che ne
ho bisogno però non riesco mai ad arrivare a una conclusione....
Dovrei riuscire a leggere il valore che sta accanto a "received" dell'
ultima riga di questo output qui:
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 
192.168.1.2
: icmp_seq=1 ttl=128 time=0.230 ms
--- 192.168.1.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.230/0.230/0.230/0.000 ms
1 packets transmitted, 1 received, 0% packet loss, time 0ms
                                  ^ ^^^^^^^^^^
Pensavo di fare un ciclo che riempisse un array con le righe e poi
prendere l' ultima e in qualche maniera  estrapolare il valore che
precede received...
Credo esista sicuramente una soluzione più ortodossa, ma non riesco ad
arrivarci...
Mi spiegate come si può fare!
Grazie a tutti!!!

Le cose i complicano perchè potrebbe anche darmi questo output qui...
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 
192.168.1.2
: icmp_seq=1 ttl=128 time=0.212 ms
--- 192.168.1.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.212/0.212/0.212/0.000 ms
root@LinuxServer:/var/www/rrdtool/cgi-bin# pico 
test.pl
root@LinuxServer:/var/www/rrdtool/cgi-bin# ping 192.168.1.2 -c 1
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 
192.168.1.2
: icmp_seq=1 ttl=128 time=2.05 ms
--- 192.168.1.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.056/2.056/2.056/0.000 ms
e quindi non sarebbe + nell' ultima riga...
mmm...

Guarda non sono un esperto di Perl, ma ho provato questo script e ha 
funzionato:
use warnings;
use strict;
my $output = <<"ENDOUTPUT";
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 
192.168.1.2
: icmp_seq=1 ttl=128 time=0.230 ms
--- 192.168.1.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.230/0.230/0.230/0.000 ms
ENDOUTPUT
$output =~ m/received,\s(.*),/;
print $1;
Questo vuol dire che se riesci a mettere l'output del comando in una 
stringa, e il pattern /received,\s(.*),/ non si ripete in altri punti 
della stinga dovresti ottenere ciň che ti serve.
Non hai bisogno di mettere le singole righe nelle celle di un array 
perchč alla fine tutto l'output non č che una stringa con in mezzo dei 
caratteri "\n".
Spero di esserti stato d'aiuto
Simone

ottimo aiuto!
#!/usr/bin/perl
use warnings;
use strict;
#Ip to check
my $output = `ping -c 1 10.10.10.1`;
$output =~ m/received,\s(.*),/;
print $1;
mi dà però come output:
0% packet loss
why?
Ora cerco di capire bene questa espressione...ne ho capito le grandi
potenzialità ma non mi vengono intuitive come a voi, uffa!
Comunque grazie ancora!

 Comunque grazie ancora!
prego
Simone

Se vuoi quello che c'è scritto prima di qualunque received nel file:
my @arr;
while (<>) {
  if (m/ , \s* (\S+) \s+ received/x) {
    push @arr, $1;
  }
}
Se vuoi solo l'ultima:
my $t;
while (<>) {
  if (m/ , \s* (\S+) \s+ received/x) {
    $t = $1;
  }
}
Vedi un pò se va bene...
simone....@gmail.com
 ha scritto:
