2013-03-28 208 views

回答

3
use File::Basename qw(fileparse); 
my ($fname, $dir) = fileparse($FullPath); 

請注意,您$FullPath不包含C:\sample\file.txt。爲了得到這一點,你需要

my $FullPath = "C:\\sample\\file.txt"; 

my $FullPath = 'C:\sample\file.txt'; 

始終使用use strict; use warnings;!它會因爲沒有意義的"\s"而發出警告。


要解析的Windows路徑的任何機器上,你可以使用以下命令:

use Path::Class qw(foreign_file); 
my $file = foreign_file('Win32', $FullPath); 
my $fname = $file->basename(); 
my $dir = $file->dir(); 
+0

我用你認爲上面的代碼,但作爲預期的輸出不來了。輸出如下:$ path =「./」$ name =「C:\ sample \ file.txt」 – Rahul 2013-03-28 07:54:17

+0

這是因爲你的代碼是越野車。您實際上並沒有在'$ FullPath'中放置'C:\ sample \ file.txt'。查看更新。 – ikegami 2013-03-28 08:01:17

+0

實際上有一個html頁面,其中使用瀏覽按鈕選擇了一個文件,當按下提交按鈕時,該值應該傳遞給perl程序。所以當我使用瀏覽按鈕選擇一個文件,並按下提交按鈕時,傳遞給perl程序的值是「C:\ sample \ file.txt」。但我只想要文件名。所以你可以建議一些方法來做到這一點? – Rahul 2013-03-28 08:03:11

0

我建議你使用splitpathFile::Spec::Functions。該函數將卷,目錄和文件名作爲三個單獨的值返回。

下面的代碼將這些值放入一個數組中,然後刪除第二個(目錄)元素並將其附加到第一個,給出完整路徑和文件名,如您在@path中所需。

use strict; 
use warnings; 

use File::Spec::Functions 'splitpath'; 

my $full_path = 'C:\sample\file.txt'; 
my @path = splitpath $full_path; 
$path[0] .= splice @path, 1, 1; 

print "$_\n" for @path; 

輸出

C:\sample\ 
file.txt 
相關問題