put

put (줄바꿈과 함께 출력)

값을 출력할 때 줄바꿈까지 자동으로 넣고 싶다면 put을 쓰면 돼요. 화면에 한 줄씩 뭔가 보여줄 일이 많을 텐데, 그때마다 print에 개행 문자까지 붙이려면 번거롭죠. put이 그 수고를 덜어줘요.

출처: Raku Documentation — put

본문

Independent routines에서

multi put()
multi put(**@args --> True)
multi put(Junction:D --> True)
multi put(Str:D \x)
multi put(\x)

print와 같지만, 끝에 print-nl(기본적으로 개행 문자를 출력)을 쓴다는 점만 달라요. Junction 인자는 오토스레드되고, 출력되는 문자열의 순서는 보장되지 않아요.

put "Hi there!\n";   # OUTPUT: «Hi there!␤␤»
put "Hi there!";     # OUTPUT: «Hi there!␤»
put [1, 2, 3];       # OUTPUT: «1 2 3␤»
put "Hello" | "Goodbye"; # OUTPUT: «Hello␤Goodbye␤»

put() 혼자 쓰면 개행 한 줄만 출력해요.

put "Hey"; put(); put("Hey"); # OUTPUT: «Hey␤␤Hey␤»

여기서 put 뒤에 괄호를 썼다는 점에 주목하세요. 괄호 없이 쓰면(6.d 버전부터) 예외가 던져져요. for 앞에서 이렇게 쓰는 경우에도 예외가 발생하니, 그럴 때는 메서드 형태인 .put을 사용하세요.

.put for <1 2 3>;             # OUTPUT: «1␤2␤3␤»

IO::Handle에서

multi method put(**@text --> True)
multi method put(Junction:D --> True)

주어진 @text를 핸들에 쓰고, Str이 아닌 객체는 .Str 메서드를 호출해 Str로 강제 변환한 뒤 끝에 .nl-out 값을 덧붙여요. Junction 인자는 오토스레드되고 출력 순서는 보장되지 않아요.

핸들이 이진(binary) 모드일 때 이 메서드를 호출하면 X::IO::BinaryMode 예외가 던져져요.

my $fh = 'path/to/file'.IO.open: :w;
$fh.put: 'some text';
$fh.close;

role IO::Socket에서

method put(IO::Socket:D: Str(Cool) $string)

주어진 문자열에 \n을 덧붙여 소켓에 써서, 연결 반대편으로 보내요. 소켓이 연결되어 있지 않으면 실패해요.

Mu에서

multi method put(--> Bool:D)

값을 $*OUT에 출력하고 끝에 개행을 추가하며, 필요하면 Str이 아닌 객체를 .Str 메서드로 문자열로 변환해요.

"abc".put;              # OUTPUT: «abc␤»

Proc::Async에서

method put(Proc::Async:D: \x, |c)

출력에 .join을 적용하고 개행을 붙인 뒤 .print를 호출해요. 프로세스가 시작되지 않았거나 쓰기용으로 열려 있지 않으면 예외를 던져요.