in reply to Re^6: using online translation engines with perl (ping)
in thread using online translation engines with perl
This first routine works quite well.
### www.perlmonks.org is unreachable ### microsoft.com is unreachable ping: foo.bar: Name or service not known ### foo.bar is unreachable return3 is done with pinging 7seconds elapsed during pinging created file /home/bob/Documents/meditations/template_stuff/translatio +ns/28-11-2018-08-18-41.monk.txt $
The details are well-aligned and tell a story, one that is mercifully-short by machine standards:
PING www.google.com(2607:f8b0:400a:803::2004) 56 data bytes --- www.google.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 36.669/36.669/36.669/0.000 ms PING perlmonks.org (66.39.54.27) 56(84) bytes of data. --- perlmonks.org ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2035ms PING microsoft.com (40.112.72.205) 56(84) bytes of data. --- microsoft.com ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2031ms
I did have to become superuser to execute this. Even so,
$ ./4.ping3.pl ... Error utime () on '/home/bob/Documents/meditations/template_stuff/1.mo +nk.tmpl': Permission denied at ./4.ping3.pl line 26. $ sudo perl 4.ping3.pl ... ### www.google.com is unreachable ### www.translate.yandex.ru is unreachable ### www.bing.com is unreachable ### www.yahoo.com is unreachable return3 is done with pinging 13seconds elapsed during pinging
I reach no one with either icmp nor tcp. Meanwhile, my wifi signal remains strong for every other thing I'm doing. Again, I've placed it in my little template for having monastery tags:
$ cat 4.ping3.pl #!/usr/bin/perl -w use 5.011; use Path::Tiny; use POSIX qw(strftime); # initialization that must precede main data structure # User: enter a subdirectory you would like to create # enter a subdirectory of this^^^ for output my $ts = "template_stuff"; my $output = "translations"; ## turning things to Path::Tiny my $abs = path(__FILE__)->absolute; my $path1 = Path::Tiny->cwd; my $path2 = path( $path1, $ts ); say "abs is $abs"; say "path1 is $path1"; say "path2 is $path2"; print "This script will build the above path2. Proceed? (y|n)"; my $prompt = <STDIN>; chomp $prompt; die unless ( $prompt eq "y" ); my $template_file = "1.monk.tmpl"; my $abs_to_template = path( $path2, $template_file )->touchpath; my $string1 = '<{$symbol}></{$symbol}>'; my $return5 = $abs_to_template->spew_utf8($string1); say "return5 is $return5"; # script params my %vars = ( monk_tags => path( $path2, $template_file ), translations => path( $path2, $output ), book => 'monastery tags ', ); my $rvars = \%vars; my $return1 = write_monk_tags($rvars); say "return1 is $return1"; my $munge = strftime( "%d-%m-%Y-%H-%M-%S", localtime ); $munge .= ".monk.txt"; # use Path::Tiny to create and write to a text in relevant directory my $save_file = path( $vars{$output}, $munge )->touchpath; my $return2 = $save_file->spew_utf8($return1); say "return2 is $return2"; ## ping a few sites and add it to this log; append output # keep time my $start = time; my $return3 = ping_sites($save_file); say "return3 is $return3"; say time - $start, "seconds elapsed during pinging"; say "created file $save_file"; system("gedit $save_file &"); sub ping_sites { use 5.011; use Path::Tiny; use Net::Ping; my $outfile = shift; my $pinger = Net::Ping->new( 'tcp', 3 ); for my $dest ( 'www.google.com', 'www.translate.yandex.ru', 'www.bing.com', 'www.yahoo.com' ) { $pinger->ping($dest) or print "### $dest is unreachable\n"; } $pinger->close; return "done with pinging"; } sub write_monk_tags { use warnings; use 5.011; use Text::Template; my $rvars = shift; my %vars = %$rvars; my $body = $vars{"monk_tags"}; my $template = Text::Template->new( ENCODING => 'utf8', SOURCE => "$body", ) or die "Couldn't construct template: $!"; my $return = "$vars{\"book\"}\n"; # User: change these quoted values for different order or tags my @buchstaben = qw/i p c readmore b/; for my $i (@buchstaben) { $vars{"symbol"} = $i; print "How many $i tag pairs would you like?: "; my $prompt = <STDIN>; chomp $prompt; if ( $prompt lt 1 ) { $prompt = 0; } while ( $prompt gt 0 ) { my $result = $template->fill_in( HASH => \%vars ); $return = $return . $result; --$prompt; } } return $return; } __END__ $
Now that I see how I would have to shoe-horn it in, this doesn't seem like a viable option for legible, lexical, and portable perl. I'll drop this rock.
Why use alarm at all instead of ping's built-in timeout?This seems to be a better option. I'll continue testing. That I can't reach google with Net::Ping is a head-scratcher. Thanks for your comments,
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^8: using online translation engines with perl (ping)
by hippo (Archbishop) on Nov 29, 2018 at 10:13 UTC | |
by Aldebaran (Curate) on Nov 30, 2018 at 00:28 UTC | |
by haukex (Archbishop) on Nov 30, 2018 at 08:48 UTC |