home *** CD-ROM | disk | FTP | other *** search
/ c't freeware shareware 1997 / CT_SW_97.ISO / pc / software / entwickl / win95 / pw32i306.exe / lib / pwd.pl < prev    next >
Perl Script  |  1996-08-07  |  1KB  |  61 lines

  1. ;# pwd.pl - keeps track of current working directory in PWD environment var
  2. ;#
  3. ;# $RCSfile: pwd.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:11 $
  4. ;#
  5. ;# $Log:    pwd.pl,v $
  6. ;#
  7. ;# Usage:
  8. ;#    require "pwd.pl";
  9. ;#    &initpwd;
  10. ;#    ...
  11. ;#    &chdir($newdir);
  12.  
  13. use Cwd;
  14.  
  15. package pwd;
  16.  
  17. sub main'initpwd {
  18.     if ($ENV{'PWD'}) {
  19.     local($dd,$di) = stat('.');
  20.     local($pd,$pi) = stat($ENV{'PWD'});
  21.     if ($di != $pi || $dd != $pd) {
  22.         chop($ENV{'PWD'} = cwd);
  23.     }
  24.     }
  25.     else {
  26.     chop($ENV{'PWD'} = cwd);
  27.     }
  28.     if ($ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|) {
  29.     local($pd,$pi) = stat($2);
  30.     local($dd,$di) = stat($1);
  31.     if ($di == $pi && $dd == $pd) {
  32.         $ENV{'PWD'}="$2$3";
  33.     }
  34.     }
  35. }
  36.  
  37. sub main'chdir {
  38.     local($newdir) = shift;
  39.     $newdir =~ s|/{2,}|/|g;
  40.     if (chdir $newdir) {
  41.     if ($newdir =~ m#^/#) {
  42.         $ENV{'PWD'} = $newdir;
  43.     }
  44.     else {
  45.         local(@curdir) = split(m#/#,$ENV{'PWD'});
  46.         @curdir = '' unless @curdir;
  47.         foreach $component (split(m#/#, $newdir)) {
  48.         next if $component eq '.';
  49.         pop(@curdir),next if $component eq '..';
  50.         push(@curdir,$component);
  51.         }
  52.         $ENV{'PWD'} = join('/',@curdir) || '/';
  53.     }
  54.     }
  55.     else {
  56.     0;
  57.     }
  58. }
  59.  
  60. 1;
  61.