2012-10-22 2 views
2

내가 기본 디렉토리 /home/user/test/을 가지고 있다고 가정 해 보겠습니다. 자, a, b 두 개의 문자열이 /home/user/test/a/b과 같은 기본 디렉토리 안의 폴더가 될 것입니다.Perl : 문자열에서 디렉토리 만들기

은 현재 내가 무엇을하고 있는가하는 것입니다 : 이제

use File::Path qw(make_path); 

my $path = "$basedir"."/"."a"."/"."b" 
make_path("$path"); 

, 무엇을 찾고 있어요 것은 :

my $dir = "/home/user/test"; 
my $x = "a"; 
my $y = "b"; 

make_path($dir, $x, $y); 

하지만 대신 /home/user/test/a/b를 만드는 위의 코드를 실행하면 두 개의 별도의 디렉토리를 생성 a 현재 작업 디렉토리에 b이 있습니다.

이렇게하려면 올바른 방법은 무엇입니까?

use strict; 
use warnings; 
use File::Path qw(make_path);  

my $dir = "/home/user/test"; 
my $x = "a"; 
my $y = "b"; 

make_path(join '/',$dir,$x,$y); 

자세한 내용은 join를 찾기 :

답변

3

여기에 그것을 할 수있는 쉬운 방법입니다.

+0

내가 join''알고있다 그러나 나는이었다 또한 perldoc을 경로 :: 클래스 :: 디렉터리를 참조 좀 더 우아하고 일반적인 방법을 찾고 있습니다. – RanRag

+0

@Noob,'make_path'는 생성 될 경로를 설명하는 문자열을 필요로하므로 서브 디렉토리를 단일 문자열로 어셈블해야합니다. 'join '은 그렇게하는 가장 간단한 방법입니다. 만약 두 개의 서브 디렉토리를 넘어 일반화하고 싶다면 모든 서브 디렉토리를 하나의 배열에 저장하고 배열에'join '하십시오. – dan1111

+0

확인. 나는이 해결책을 갈거야. – RanRag

3

를보다 효율적으로 사용 경로 : 클래스 :: 디렉터리

use Path::Class qw(dir); # Export a short constructor 

my $dir = dir('foo', 'bar');  # Path::Class::Dir object 
my $dir = Path::Class::Dir->new('foo', 'bar'); # Same thing 

# Stringifies to 'foo/bar' on Unix, 'foo\bar' on Windows, etc. 
print "dir: $dir\n"; 

는 또는 https://metacpan.org/module/Path::Class::Dir