2011-12-08 17 views

答えて

7

使用File::Basename

> perl -MFile::Basename -wE "say dirname(qq(c:/perl/bin/perl.exe));" 
c:/perl/bin 
+2

ファイル::スペックは別のオプションですが試すことができます。 (私は何年か前にFile :: BasenameからFile :: Specに切り替えました;なぜ私がそれをしたのか覚えていればフォローアップします) –

+0

@KeithThompson 'File :: Basenameのdirname()とbasename()同じ名前のシェル関数とC関数の振る舞いと癖をエミュレートします。 File :: Specのsplitpath()メソッドとsplitdir()メソッドを使用するのがあなたの懸念事項を単に解析するだけであれば安全です。 ' – unixman83

5

またPath::Classを使用することができます。

#!/usr/bin/env perl 

use strict; 
use warnings; 

use Path::Class; 

my $file = file('c:\My_Designs\ipcore_script\test\src\IP_CORE\mux\sus.do'); 

print $file->parent, "\n"; 

出力:

C:\My_Designs\ipcore_script\test\src\IP_CORE\mux
+1

こんにちは、ありがとうございます。 script.pl行6の@INC(@INCにはC:/ Perl64/site/lib C:/ Perl64/ lib。)のPath/Class.pmを見つけることができません。 BEGINは失敗しました - .pl line 6.私はこのclass.pmライブラリを見つけることができます – mitt2050

+1

@ mitt2050彼の答えにはリンクがあります。ただし、ActivePerlを使用する場合は、そのパッケージマネージャーを使用することができます。 cmdプロンプトから 'ppm install Path :: Class'と入力します。あるいは、GUIにアクセスするための 'ppm'だけです。 – TLP

0

また、この

$path='c:\My_Designs\ipcore_script\test\src\IP_CORE\mux\sus.do'; 

my $pathname=substr($path, 0, rindex($path,"\\")); 

Result: 
c:\My_Designs\ipcore_script\test\src\IP_CORE\mux 
関連する問題