Raku의 &*chdir — 프로세스의 현재 디렉터리까지 바꾸기
Raku의 &*chdir — 프로세스의 현재 디렉터리까지 바꾸기
Raku의 chdir 루틴은 $*CWD 변수만 바꾸지 프로세스의 실제 현재 디렉터리는 바꾸지 않아요. 진짜 프로세스 레벨까지 바꾸고 싶을 때 쓰는 게 &*chdir이에요. 이름 앞에 &*가 붙은, 동적 변수 형태의 서브루틴이죠.
시그니처
PROCESS::<&chdir> = sub (IO() $path --> IO::Path:D) { }
$*CWD 변수 값을 주어진 $path로 바꾸고, 프로세스의 현재 디렉터리도 $path.absolute 값으로 설정해요.
일반 chdir과의 차이
일반 chdir 루틴은 $*CWD만 바꾸고 프로세스 디렉터리는 건드리지 않아요. &*chdir은 둘 다 바꿔요. 그래서 대부분의 경우엔 일반 chdir을 쓰는 게 맞아요. 또 일반 chdir은 파일 테스트(:d, :r 같은)를 지정할 수 있는데, &*chdir에는 그런 인자가 없어요.
반환값
성공 시 새 $*CWD를 나타내는 IO::Path를 돌려주고, 실패 시 Failure를 돌려주며 $*CWD는 그대로 둬요. $path는 IO 메서드를 가진 객체라면 무엇이든 될 수 있어요.
&*chdir('/tmp');