top
Loading...
Perl的絕對路徑與相對路徑祥解
新手在安裝 Perl 程序的時候,對這絕對路徑和相對路徑常常搞不清楚,不知道如何設置。希望看完本文后,能讓你們對此不再糊涂。

1. 什么是絕對路徑 ?什么是絕對路徑的相對表示?
絕對路徑就是你的主頁上的文件或目錄在硬盤上真正的路徑,比如,你的 Perl 程序是存放在 c:/apache/cgi-bin 下的,那么 c:/apache/cgi-bin 就是 CGI-BIN 目錄的絕對路徑(如果你不清楚目錄的絕對路徑,可以問你主頁提供商,也可以用最后的程序自己來檢測)。
絕對路徑的相對表示其實很好理解,假設你的 Perl 程序是放在 c:/apache/cgi-bin 下的,如果你要表示這個目錄的絕對路徑,除了上面說的 c:/apache/cgi-bin 外,你還可以用 . 來表示,因為你的程序就在當前目錄下的。其實這個問題和 DOS 下的 CD 命令類似的,你如果在 c:windowssystem 目錄下,現在要轉換到 c:windows 下,那么你可以用絕對路徑命令:cd c:windows,也可以用絕對路徑的相對表示命令:cd ..,你現在理解了嗎?
要注意的是,如果你用的是 PWS 或 IIS WEB 服務器,那么路徑必須用絕對路徑來表示,而不能用絕對路徑的相對表示,千萬要注意了!

2. 什么是相對路徑?什么是 URL 相對路徑?
這兩種說法實際上表達的意思是一樣的。比如,你的 Perl 程序 URL 是 http://www.CGIer.net/cgi-bin/test.cgi,調用圖片 URL 是 http://www.CGIer.net/gif/test.gif,如果你要在你的程序中表示此圖片的相對路徑,那么可以寫成 http://www.CGIer.net/gif/test.gif,或者是 /gif/test.gif 。說白了,相對路徑其實就可以理解為 URL。

3. 絕對路徑如何檢測?
運行如下子程序,返回變量 $mypath 的值就是此 Perl 程序當前所在目錄的絕對路徑。
sub mypath
{
  local $temp;
  $temp=__FILE__;
  $temp=~ s////g if ($temp=~//);
  if ($temp) {
   $mypath=substr($temp,0,rindex($temp,"/"));
  }
  else {
   $mypath=substr($ENV{"PATH_TRANSLATED"},0,rindex($ENV{"PATH_TRANSLATED"},""));
   $mypath=~ s////g;
  }
  return $mypath;
}


4. 相對路徑如何檢測?
運行如下子程序,返回變量 $myurl 的值就是此 Perl 程序當前所在目錄的相對路徑。
sub myurl
{
  local $server_port,$fullurl;
  $server_port = ":$ENV{"SERVER_PORT"}" if ($ENV{"SERVER_PORT"} ne "80");
  $fullurl   = "http://$ENV{"SERVER_NAME"}$server_port$ENV{"SCRIPT_NAME"}";
  $myurl    = substr($fullurl,0,rindex($fullurl,"/"));
  return $myurl;

北斗有巢氏 有巢氏北斗