루비가 알골68처럼 표현식 자체가 값을 리턴하는 것도 놀랍지만
line = if ...
...
else
...
end
오늘 업무용으로 간단한 스크립트를 작성하다가 문자열내의 #{} 안의 {}도 일종의 코드 블록이 아닐까 싶어서 식을 넣으니 잘 작동하네요. 문자열 안의 {와 }도 결국 블록이라 식을 넣을 수 있으니 perl이나 php가 문자열 안에서 $변수의 형태로 편리를 주는 것보다 발전된 형태네요.
claa ...
def 구분( line )
열 = line.split(/\t/)
if 포함(line)
품명 = 열[$항목[:명칭]]
합계액 = 수치화( 열[$항목[:합계액]] )
print "%40s %10s %10s" % [ 품명, 열[$항목[:조제량]], 합계액]
if @@기출약품.has_key?(품명)
puts " #{합계액 > @@기출약품[품명]? "(+)" : "( )"} <= #{@@기출약품[품명]} "
else
puts
end
@@기출약품[품명] = 합계액
@합계액 += 합계액
end
end
end
덧붙여 루비에 -KE 옵션 같은 걸 주면 C#이나 자바처럼 한글 변수명을 쓸 수 있어서 편합니다. 어휘가 사고를 제한하는 경향이 있기 때문에 일부나마 모국어로 프로그래밍할 수 있으니 좋네요. 당분간 c/c++/ruby 조합이 쓸모가 많을 듯...
line = if ...
...
else
...
end
오늘 업무용으로 간단한 스크립트를 작성하다가 문자열내의 #{} 안의 {}도 일종의 코드 블록이 아닐까 싶어서 식을 넣으니 잘 작동하네요. 문자열 안의 {와 }도 결국 블록이라 식을 넣을 수 있으니 perl이나 php가 문자열 안에서 $변수의 형태로 편리를 주는 것보다 발전된 형태네요.
claa ...
def 구분( line )
열 = line.split(/\t/)
if 포함(line)
품명 = 열[$항목[:명칭]]
합계액 = 수치화( 열[$항목[:합계액]] )
print "%40s %10s %10s" % [ 품명, 열[$항목[:조제량]], 합계액]
if @@기출약품.has_key?(품명)
puts " #{합계액 > @@기출약품[품명]? "(+)" : "( )"} <= #{@@기출약품[품명]} "
else
puts
end
@@기출약품[품명] = 합계액
@합계액 += 합계액
end
end
end
덧붙여 루비에 -KE 옵션 같은 걸 주면 C#이나 자바처럼 한글 변수명을 쓸 수 있어서 편합니다. 어휘가 사고를 제한하는 경향이 있기 때문에 일부나마 모국어로 프로그래밍할 수 있으니 좋네요. 당분간 c/c++/ruby 조합이 쓸모가 많을 듯...
덧글
use utf8;
my $품명="알약";
binmode STDOUT, ":encoding(UTF-8)";
print STDOUT $품명;
그리고 perl처럼 " "안에서 변수의 내용이 보간되는 것이 훨씬 유연합니다.
스칼라 $scalar와 배열 @array은 그대로 적어주면 실제 내용으로 대체되죠
대부분의 경우 변수를 그대로 사용하는 것이 대부분이지만 어떠한 표현식의
결과를 "" 안에서 그대로 찍고 싶을때....
Perl을 좀 공부해보셨다면 ${ }는 스칼라 디레퍼런스임을 하실겁니다.
그래서 값을 로 레퍼런스를 만들어주고 다시 ${}로 디레퍼런스 하는
테크닉을 써서 다음처럼 쓸 수 있습니다.
my $a=12;
print "$a / 2 = ". $a/2 ."n";
print "$a / 2 = ${($a/2)}n"; #위와 동일한 결과
만약 리스트를 리턴하는 함수의 내용을 바로 찍고 싶다면
넘어온 리스트를 [ ]로 감싸서 익명배열로 만든다음 @{ }로
배열을 디레퍼런스 하는 테크닉을 써서 다음과 같이 쓸 수 있습니다.
print "list_ret+func() returned @{[ list_ret_func() ]}n";
저는 Perl이 "" 안에서 변수를 보간(interpolation)하는 방식이 더 자연스럽다고 생각합니다.
레퍼런스, 디레퍼런스 테크닉을 사용하면 어떠한 표현식의 결과도 다 바로 찍을 수 있고
ruby #{ } 형식은 변수의 sigil을 없애면서 나타난 기형적인 형태라고 봐야겠죠.