put
put (줄바꿈과 함께 출력)
값을 출력할 때 줄바꿈까지 자동으로 넣고 싶다면 put을 쓰면 돼요. 화면에 한 줄씩 뭔가 보여줄 일이 많을 텐데, 그때마다 print에 개행 문자까지 붙이려면 번거롭죠. 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: «HelloGoodbye»
put() 혼자 쓰면 개행 한 줄만 출력해요.
put "Hey"; put(); put("Hey"); # OUTPUT: «HeyHey»
여기서 put 뒤에 괄호를 썼다는 점에 주목하세요. 괄호 없이 쓰면(6.d 버전부터) 예외가 던져져요. for 앞에서 이렇게 쓰는 경우에도 예외가 발생하니, 그럴 때는 메서드 형태인 .put을 사용하세요.
.put for <1 2 3>; # OUTPUT: «123»
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를 호출해요. 프로세스가 시작되지 않았거나 쓰기용으로 열려 있지 않으면 예외를 던져요.