news.utdallas.edu!wupost!howland.reston.ans.net!usc!enterpoop.mit.edu!senator-bedfellow.mit.edu!athena.mit.edu!mkgray Mon Mar 15 14:45:49 CST 1993
Article: 1591 of comp.lang.perl
Xref: feenix.metronet.com comp.lang.perl:1591
Path: feenix.metronet.com!news.utdallas.edu!wupost!howland.reston.ans.net!usc!enterpoop.mit.edu!senator-bedfellow.mit.edu!athena.mit.edu!mkgray
From:
[email protected] (Matthew K Gray)
Newsgroups: comp.lang.perl
#Subject: Re: Getting perl to do a telnet
Date: 15 Mar 1993 18:49:38 GMT
Organization: Massachusetts Institute of Technology
Lines: 110
Distribution: world
Message-ID: <
[email protected]>
References: <
[email protected]>
NNTP-Posting-Host: podge.mit.edu
Keywords: chat2, chat, telnet, geography
The easiest way to do this is probably with the chat2.pl package.
This is available all over the place by ftp.
(eg, gatekeeper.dec.com:/contrib/src/crl/perl/src/lib/chat2.pl)
Here is a sample of using chat2.pl that retrieves info from the geographical
name server:
---cut here---cut here---cut here---
#!perl
if($#ARGV < 0) {&usage();}
sub usage {
print("Usage:\n");
print("\tgeo place name\n");
exit(0);
}
require 'chat2.pl';
sub listen {
local($secs) = @_;
local($return,$tmp) = "";
while (length($tmp = &chat'expect($secs, '(.|\n)+', '$&'))) {
print $tmp if $trace;
$return .= $tmp;
}
$return;
}
# 0 <city name>
# 1 <county FIPS code> <county name>
# 2 <state/province abbreviation> <state/province name>
# 3 <nation abbreviation> <nation name>
# A <telephone area code>
# E <elevation in feet above mean sea level>
# F <feature code> <feature name>
# L <latitude DD MM SS X> <longitude DDD MM SS X>
# P <1980 census population>
# R <remark>
# T <time zone>
# Z <postal ("ZIP") code>
$request = join(' ', @ARGV);
&chat'open_port('martini.eecs.umich.edu', 3000) || die "open: $!";
$_=&listen(2);
while(!/Geographic/){
$_=&listen(5);
}
print("Geographic NameServer Query: \"$request\"\n");
&chat'print("$request\n");
$_=&listen(3);
split(/\n/);
foreach $dataline (@_){
@els = split(/[ ]+/, $dataline);
$foo =shift(@els);
if($foo=~/0/){
$rest = join(' ',@els);
chop($rest);
print("\nLocation Name: $rest\n");
}
if($foo=~/1/){
$bar = shift(@els);
$rest = join(' ', @els);
chop($rest);
print("County: $rest ($bar)\n");
}
if($foo=~/2/){
$bar = shift(@els);
$rest = join(' ', @els);
chop($rest);
print("State/Province: $rest ($bar)\n");
}
if($foo=~/3/){
$bar = shift(@els);
$rest = join(' ', @els);
chop($rest);
print("Country: $rest ($bar)\n");
}
if($foo=~/A/){
$rest = join(' ', @els);
chop($rest);
print("Area Code: $rest\n");
}
if($foo=~/E/){
$rest = join(' ', @els);
chop($rest);
print("Elevation: $rest\n");
}
if($foo=~/L/){
print("Latitude: $els[0] $els[1]' $els[2]\" $els[3]\n");
print("Longitude: $els[4] $els[5]' $els[6]\" $els[7]\n");
}
if($foo=~/P/){
print("Population: $els[0]\n");
}
if($foo=~/T/){
print("Time Zone: $els[0]\n");
}
if($foo=~/Z/){
print("Zip Code: $els[0]\n");
}
if($foo=~/R/){
$rest = join(' ', @els);
print("Comment: $rest\n");
}
}
&chat'print("quit\n");