Raku의 basename — 경로에서 파일 이름만 떼어내기
Raku의 basename — 경로에서 파일 이름만 떼어내기
경로 문자열에서 마지막에 해당하는 파일시스템 객체 이름, 즉 basename만 꺼내고 싶을 때가 많아요. basename 메서드는 IO::Path 객체와 여러 IO::Spec 구현에서 각자 조금씩 다른 방식으로 이 일을 해요. 공통된 핵심은 '경로의 마지막 이름 부분'을 돌려준다는 거예요.
본문
In IO::Path
method basename(IO::Path:D:)
경로 객체에서 basename 부분을 돌려줘요. 이는 경로가 참조하는 파일시스템 객체 자체의 이름이에요.
"docs/README.pod".IO.basename.say; # OUTPUT: «README.pod»
"/tmp/".IO.basename.say; # OUTPUT: «tmp»
여기서 한 가지 기억할 게 있어요. IO::Spec::Win32 의미론에서 Windows 공유(share)의 basename은 공유 이름이 아니라 \예요.
IO::Path::Win32.new('//server/share').basename.say; # OUTPUT: «\»
In IO::Spec::Win32
method basename(Str:D $path --> Str:D)
경로를 문자열로 받아, 마지막 슬래시나 백슬래시 뒤의 (비어 있을 수도 있는) 부분을 돌려줘요.
IO::Spec::Win32.basename("foo/bar/") .raku.say; # OUTPUT: «""»
IO::Spec::Win32.basename("foo/bar\\").raku.say; # OUTPUT: «""»
IO::Spec::Win32.basename("foo/bar/.").raku.say; # OUTPUT: «"."»
IO::Spec::Win32.basename("foo/bar") .raku.say; # OUTPUT: «"bar"»
In IO::Spec::Unix
method basename(Str:D $path --> Str:D)
경로를 문자열로 받아, 마지막 슬래시 뒤의 (비어 있을 수도 있는) 부분을 돌려줘요. Win32와 달리 백슬래시를 슬래시처럼 취급하지 않아요.
IO::Spec::Unix.basename("foo/bar/") .raku.say; # OUTPUT: «""»
IO::Spec::Unix.basename("foo/bar/.").raku.say; # OUTPUT: «"."»
IO::Spec::Unix.basename("foo/bar") .raku.say; # OUTPUT: «"bar"»