home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / perl / tutorial / eg / nfinger < prev    next >
Encoding:
Text File  |  1990-02-02  |  1.0 KB  |  51 lines

  1. #!/usr/bin/perl
  2. #
  3. # nfinger -- finger people at their home machines
  4. #         as defined in the /usr/lib/aliases 
  5. #         dbm file.  recursively resolve all
  6. #         aliases first, so works on lists
  7.  
  8. dbmopen(alias,'/usr/lib/aliases',0444) || die "can't dbmopen aliases";
  9.  
  10. chop($host = `hostname`);
  11.  
  12. @finger = ('/usr/ucb/finger');
  13.  
  14. while ($ARGV[0] =~ /^-/) { 
  15.     if ($ARGV[0] eq '-v') {
  16.     $verbose++;
  17.     shift;
  18.     } else {
  19.     push(@finger, shift); 
  20.     }
  21.  
  22. while ($user = shift) { 
  23.     push(@finger, &resolve($user)); 
  24. }
  25.  
  26. print "@finger\n" if $verbose;
  27. exec @finger;
  28.  
  29. ##############################################################
  30.  
  31. sub resolve {
  32.     local($addr,$alias,@list);
  33.  
  34.     while ($addr = shift) {
  35.     unless (defined $alias{$addr."\000"}) {
  36.         push(@list, $addr);
  37.         next;
  38.     } 
  39.     chop($alias = $alias{$addr."\000"});
  40.     $alias =~ s/^\s*(.*)\s*$/$1/;
  41.     $alias =~ s/^([^!]*)!([^!]+)$/$2@$1/;
  42.     if ($alias eq "$addr@$host") {
  43.         push(@list, $addr);
  44.     }  else {
  45.         push(@list,&resolve(split(/[\s,]+/,$alias)));
  46.     }
  47.     } 
  48.     return @list;
  49.