Skip to content

Learning perl 5th review

aero edited this page Jul 6, 2011 · 109 revisions

๊ฑฐ์นจ์—†์ด ๋ฐฐ์šฐ๋Š” ํŽ„(Learning Perl 5th ํ•œ๊ธ€๋ฒˆ์—ญํŒ) ๋น„ํ‰

์ด ๋ฌธ์„œ๋Š” Learning Perl 5th( http://oreilly.com/catalog/9780596520113 )์˜ ํ•œ๊ธ€ ๋ฒˆ์—ญํŒ์ธ "๊ฑฐ์นจ์—†์ด ๋ฐฐ์šฐ๋Š” ํŽ„"( http://www.yes24.com/24/goods/4433208 )์„ ๋ณด์ถฉํ•˜๊ณ  ์ดํ•ด๋ฅผ ๋„์šฐ๋ฉฐ ์•ฝ๊ฐ„์€ ์ตœ๊ทผ์˜ ๊ฒฝํ–ฅ๊ณผ ๋งž์ง€ ์•Š๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ฅผ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. (๋ฒˆ์—ญํŒ์€ ์›์„œ๋ฅผ ์ถฉ์‹คํ•˜๊ฒŒ ๋ฒˆ์—ญํ•˜์˜€์„ ๋ฟ์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๊ฑด ๋ฒˆ์—ญ์„œ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์›๋ฌธ๋‚ด์šฉ์— ๋Œ€ํ•œ ๋น„ํ‰์ธ ์…ˆ์ด ๋จ)

2์žฅ - ์Šค์นผ๋ผ ๋ฐ์ดํ„ฐ

p27 - ๋ฌธ์ž์—ด

๋ฌธ์ž์—ด ๋‚ด์— \n ๊ฐ™์€ ํŠน์ˆ˜ํ•œ ์˜๋ฏธ๋ฅผ ์ง€๋‹ˆ๋Š” ์—ญ์Šฌ๋ž˜์‹œ ํšŒํ”ผ ๋ฌธ์ž๋‚˜ ๋ณ€์ˆ˜๊ฐ™์€ ๋ณด๊ฐ„(Interpolation)๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์—†์œผ๋ฉด " "๋Œ€์‹ ์— ' '์„ ์“ฐ๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ฒ„๋ฆ‡์„ ๋“ค์—ฌ ๋†“์œผ๋ฉด ๋ฌธ์ž์—ด์„ ๋ฌถ๋Š” ", ' ๋งŒ ๋ณด๊ณ ๋„ ์ด ๋ฌธ์ž์—ด ๋‚ด์—๋Š” ๋ณด๊ฐ„๋˜์–ด์•ผํ•  ๋ณ€์ˆ˜๋‚˜ ํšŒํ”ผ๋ฌธ์ž๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

p46 - undef

undef๋Š” ๊ฐ’์ด๊ธฐ๋„ ํ•˜์ง€๋งŒ ์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ•จ์ˆ˜์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ undef๋Š” Perl์— ์ •์˜๋œ ํ•จ์ˆ˜( ์ฐธ๊ณ :http://perldoc.perl.org/functions/undef.html )์ž…๋‹ˆ๋‹ค. p48์„ ๋ณด๋ฉด $madonna = undef; ๋กœ ์Šค์นผ๋ผ๊ฐ’์„ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ undef๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์•„๋ฌด๋Ÿฐ ์ธ์ž ์—†์ด ํ˜ธ์ถœํ–ˆ์„๋•Œ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฏ€๋กœ ๊ทธ๊ฒƒ์„ $madonna์— ๋„ฃ์–ด ๋ณ€์ˆ˜๋ฅผ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ฃผ๋Š” ๊ฒ๋‹ˆ๋‹ค. undef์˜ ํ•จ์ˆ˜์ •์˜๋Š” ์•ž์˜ ๋งํฌ์—์„œ๋„ ๋ณด๋‹ค์‹œํ”ผ undef EXPR์ž…๋‹ˆ๋‹ค. EXPR์€ ํ‘œํ˜„์‹์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ EXPR ๋ถ€๋ถ„์—๋Š” ๋‚˜์ค‘์— ๋ฐฐ์šธ ๋ฐฐ์—ด์ด๋‚˜ ํ•ด์‹œ๊ฐ€ ์™€์„œ ์Šค์นผ๋ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐฐ์—ด์ด๋‚˜ ํ•ด์‹œ๋“ฑ์˜ ์ดˆ๊ธฐํ™”์—๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

undef $scalar;  # ์Šค์นผ๋ผ ์ดˆ๊ธฐํ™”
undef @array;  # ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”, @array = () ๋กœ๋„ ๊ฐ€๋Šฅ
undef %hash;  # ํ•ด์‹œ ์ดˆ๊ธฐํ™”, %hash = () ๋กœ๋„ ๊ฐ€๋Šฅ

์ œ๊ฐ€ $madonna = undef; ๋ฅผ ์•ˆ์ข‹๊ฒŒ ๋ณด๋Š” ์ด์œ ๋Š” ์ €๋Ÿฐ ํ˜•ํƒœ๋ฅผ ๋ณด๊ณ  ๋ฐฐ์—ด์ด๋‚˜ ํ•ด์‹œ๋ฅผ ์ดˆ๊ธฐํ™” ํ• ๋•Œ๋„

@array = undef;
%hash = undef;

๊ฐ™์€ ๋ง๋„ ์•ˆ๋˜๋Š” ์‹ค์ˆ˜๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ์ €๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜๋„์™€๋Š” ๋‹ฌ๋ฆฌ @array๋Š” undef๊ฐ’์ด ํ•˜๋‚˜ ๋“ค์–ด๊ฐ„ ๋ฐฐ์—ด (undef)๊ฐ€ ๋˜๋ฉฐ %hash๋Š” ( "" => undef ) ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šค์นผ๋ผ,๋ฐฐ์—ด,ํ•ด์‹œ๋“ฑ์˜ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ• ๋•Œ๋Š” undef ๋ณ€์ˆ˜; ํ˜•ํƒœ๋กœ ํ•˜์‹œ๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

##3์žฅ ๋ชฉ๋ก๊ณผ ๋ฐฐ์—ด

p53 - ๋ชฉ๋ก์ƒ์ˆ˜

"๋ชฉ๋ก ์ƒ์ˆ˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๊ฐ’์˜ ๋ชฉ๋ก์„ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค." ๋ผ๊ณ  ๋˜์–ด์žˆ์ง€๋งŒ ๊ด„ํ˜ธ๋ฅผ ๋‘˜๋Ÿฌ์‹ธ๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค ํ•„์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ผ๋ก€๋กœ @a = (1..100); ๋Š” @a = 1..100; ์œผ๋กœ ๊ด„ํ˜ธ๋ฅผ ๋‘˜๋Ÿฌ์‹ธ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ด์œ ๋Š” ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„์— ์˜ํ•ด์„œ ..๊ฐ€ =๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— 1..100์— ์˜ํ•ด ๋จผ์ € ๋ชฉ๋ก(list)๊ฐ€ ์ƒ์„ฑ๋œ ๋‹ค์Œ ๋ฐฐ์—ด๋ณ€์ˆ˜ @a์— ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ํ•˜์ง€๋งŒ @a = (1,2,3); ์€ ,๊ฐ€ =๋ณด๋‹ค ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ๊ด„ํ˜ธ๋ฅผ ๋‘˜๋Ÿฌ์‹ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ์ง€ ์•Š๊ณ  @a = 1,2,3; ์ด๋ผ๊ณ  ํ•˜๋ฉด @a๋ฐฐ์—ด์—๋Š” 1 ํ•˜๋‚˜๋งŒ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜๋จธ์ง€๋Š” void context๋ผ๋Š”๊ฑธ๋กœ ๊ทธ๋ƒฅ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๊ฐ’์˜ ๋ชฉ๋ก"์ด ๋ชฉ๋ก(list)์ด๋ฉฐ ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์˜ˆ๋กœ ๋ฌธ์ž์—ด์„ ์ฐ๋Š” print ํ•จ์ˆ˜์˜ ํ”„๋กœํ† ํƒ€์ž…์€ print LIST ์ž…๋‹ˆ๋‹ค. LIST๋Š” ๋ชฉ๋ก์„ ๋งํ•˜์ฃ . print๋ฌธ์€ ๋‹ค์Œ์ฒ˜๋Ÿผ

print 'hello world', "\n";

๋กœ LIST์ธ 'hello world', "\n" ๋ฅผ ๊ด„ํ˜ธ๋กœ ์‹ธ์ง€ ์•Š์•„๋„ ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž์—ด ๊นŒ์ง€ ๋‹ค ์ž˜ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ print ํ•จ์ˆ˜๊ฐ€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ,์—ฐ์‚ฐ์ž ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด LIST๋ฅผ ๊ด„ํ˜ธ๋กœ ๋ฌถ์ง€ ์•Š์•„๋„ printํ•จ์ˆ˜์— ๋„˜์–ด๊ฐˆ LIST๊ฐ€ ๋จผ์ € ๊ตฌ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด

print (1+2),4;

๋ผ๊ณ  ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์—ฌ๊ธฐ์„œ๋Š” 1+2๋ฅผ ๋ฌถ๋Š” ๊ด„ํ˜ธ๋ฅผ print๋Š” ์ž์‹ ์ด ์ฐ์–ด์•ผํ•  LIST๋ฅผ ๋ฌถ๋Š” ๊ด„ํ˜ธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1+2์˜ ๊ฒฐ๊ณผ์ธ 3๋งŒ ์ถœ๋ ฅํ•˜๊ณ  ๋’ค์˜ 4๋Š” ๋ฌด์‹œํ•ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” LIST๋ฅผ ๋จผ์ € ๊ตฌ์„ฑํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š”

print( (1+2),4 );

๋ผ๊ณ  ํ•˜๋ฉด 3๊ณผ4๋ฅผ ๋‹ค ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ๊ด„ํ˜ธ์— ๋Œ€ํ•œ ๊ทœ์น™์€ ๋‚˜์ค‘์— ๋‹ค์‹œ ์–ธ๊ธ‰ํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์„๊ฒ๋‹ˆ๋‹ค.

p54 - qw ๋‹จ์ถ•ํ‘œํ˜„

์ „ ๊ฐœ์ธ์ ์œผ๋กœ qw( some text ) ๋ผ๋Š” ํ‘œํ˜„๋ณด๋‹ค ๊ธฐ๋ณธ์ ์œผ๋กœ qw/some text/ ๋ผ๋Š” ํ˜•ํƒœ์˜ ํ‘œํ˜„์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ฑ…์—๋„ ์„ค๋ช…์ด ๋‚˜์˜ค์ง€๋งŒ qw ๊ฐ™์€ Quote like Operators( ์ฐธ๊ณ : http://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators ์™€ http://perltraining.com.au/tips/2005-04-22.html )๋ฅผ ๋‘˜๋Ÿฌ์‹ธ๋Š” ๊ตฌ๋ถ„์ž๋Š” ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ดˆ์‹ฌ์ž๋“ค์ด qw( some text ); ํ˜•ํƒœ๋กœ ์“ฐ๋ฉด ๊ด„ํ˜ธ๋ฅผ ๋ณด๊ณ  qw๊ฐ™์€ ์—ฐ์‚ฐ์ž๊ฐ€ ๋งˆ์น˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜์ธ๋ƒฅ ์ฐฉ๊ฐํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งŽ์ด ๋ดค๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ qw/some text/ ํ˜•ํƒœ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ญ ์•Œ๊ณ  ์“ฐ๋ฉด ๋ฌธ์ œ์—†๊ฒ ์ง€๋งŒ์š”.

p55 - ๋ชฉ๋กํ• ๋‹น

๋ฐฐ์—ด์—๋Š” ๋ฐฐ์—ด์Šฌ๋ผ์ด์Šค ๋ฌธ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด @a์— ๋งŽ์€ ์š”์†Œ๋“ค์ด ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ ์ฒซ๋ฒˆ์งธ,๋‘๋ฒˆ์งธ,์„ธ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ($a[0], $a[1],$a[2])๋ผ๊ณ  ํ•˜๋ฉด ์ด๊ฒƒ์„ @a[0,1,2] ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ [ ]์•ˆ์˜ 0,1,2๊ฐ€ ์—ฐ์†์ ์ด๋ฏ€๋กœ ๋˜ ์ค„์—ฌ์„œ @a[0..2] ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด

($betty[0], $betty[1]) = ($betty[1], $betty[0]);

์€ ๊ฐ„๋‹จํ•˜๊ฒŒ

@betty[0,1] = @betty[1,0];

์œผ๋กœ

($rocks[0], $rocks[1], $rocks[2], $rocks[3]) = qw/talc mica feldspar quartz/;

๋Š”

@rocks[0..3] = qw/talc mica feldspar quartz/;

๋กœ ์ค„์—ฌ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์—์„œ ์ฒซ์š”์†Œ๋Š” ์Šค์นผ๋ผ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ๋‚˜๋จธ์ง€๋Š” ์–ด๋–ค ๋ฐฐ์—ด๋ณ€์ˆ˜์— ๋‹ด์•„ ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด ($var,@array) = @data; ์ฒ˜๋Ÿผ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ ๋” ๊นŠ์ด ์•Œ๊ณ  ์‹ถ์œผ๋ฉด http://perl101.org/arrays.html ์™€ http://gypark.pe.kr/wiki/Perl/%EB%B0%B0%EC%97%B4 ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

4์žฅ - ์‚ฌ์šฉ์ž ํ•จ์ˆ˜

p71 - ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ &

ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ &๋ฅผ ๋ถ™์ด๋Š”๊ฑด ์š”์ฆ˜์€ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ž˜ ์“ฐ์ด์ง€ ์•Š๋Š” ์˜ค๋ž˜๋œ ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค. ์ฑ…์—์„œ๋Š” ํ˜น์‹œ๋‚˜ Perl์—์„œ ์ด๋ฏธ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜๋ช…๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์„๋•Œ &๋ฅผ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด ์›๋ž˜ Perl์— ์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ๋งŒ๋“  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด &๋ฅผ ์“ฐ๋ผ๊ณ  ํ•˜์ง€๋งŒ. ๊ทธ๊ฑด ์ด๋ฏธ ์‚ฌ์šฉ์ž๊ฐ€ Perl ๋‚ด๋ถ€ ํ•จ์ˆ˜๋“ค์„ ์•Œ๊ณ  ์•Œ์•„์„œ ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

Perl์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์•ฝ์„ ๋”ฐ๋ฅด์„ธ์š”.

  • Perl์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜(์ผ๋ช… Coreํ•จ์ˆ˜)๋ฅผ ํ˜ธ์ถœํ• ๋•Œ๋Š” ์šฐ์„ ์ˆœ์œ„์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ๊ตณ์ด ๊ด„ํ˜ธ๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.(๊ฐ€๋…์„ฑ์ด ๋” ๋†’์Œ)
  • Coreํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ํ•จ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด ๊ด„ํ˜ธ๋ฅผ ์จ์„œ ํ˜ธ์ถœํ•œ๋‹ค.(Core ํ•จ์ˆ˜์™€ ์ž์—ฐํžˆ ๊ตฌ๋ณ„๋จ) &my_func(1,2,3) -> my_func(1,2,3)
  • ํ•จ์ˆ˜ํ˜ธ์ถœ์‹œ ์“ฐ๋Š” ๊ด„ํ˜ธ๋Š” if,while๋’ค์˜ ์กฐ๊ฑด๋ฌธ์ด ๋“ค์–ด๊ฐ€๋Š” ๊ด„ํ˜ธ์™€ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์กฐ๊ฑด๋ฌธ ๋’ค์˜ ๊ด„ํ˜ธ๋Š” ํ•ญ์ƒ ๋„์›Œ์„œ ์“ฐ๊ณ  ํ•จ์ˆ˜์˜ ์ธ์ž๋ฅผ ๋ฌถ๋Š” ๊ด„ํ˜ธ๋Š” ํ•ญ์ƒ ๋ถ™์—ฌ ์“ด๋‹ค.
#โ˜ž ์šฐ์„ ์ˆœ์œ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ํ˜ผ๋ˆ์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ฒฝ์šฐ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉ
 print (1+2),4;    # 3๋งŒ ์ฐํž˜ ๊ด„ํ˜ธ๋ฅผ ์ธ์ž๋“ค(LIST)์„ ๋ฌถ๋Š” ๊ด„ํ˜ธ๋กœ ์ธ์‹
 print( (1+2),4 ); # 3 4 ์ฐํž˜
 
 print join '-', @a,"\n";   # @a,"\n" ์ด ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋กœ joinํ•จ์ˆ˜์— ์ „๋‹ฌ
 print join('-', @a),"\n";  # @a๋ฅผ joinํ›„ "\n"์„ ๋”ํ•œ ๋ฆฌ์ŠคํŠธ๊ฐ€ print์— ์ „๋‹ฌ
#Before
open( my $fh, "<", "file.txt" ) || "Can't open $!";
while(<$fh>) {
    my @words = split( ' ', $_);
    print( join( '-', @word), "\n" );
}
close($fh);

#After
open my $fh, '<', 'file.txt' or "Can't open $!";
while (<$fh>) {
    my @words = split ' ',$_;
    print join( '-', @word), "\n";
}
close $fh;

ํ•จ์ˆ˜ํ˜ธ์ถœ ๊ทœ์•ฝ๊ณผ &์‚ฌ์šฉ์— ๊ด€๋ จํ•œ ๊ธ€์€ https://www.socialtext.net/perl5/index.cgi?subroutines_called_with_the_ampersand ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”

p80 ์ฝ”๋“œ์—์„œ

sub max {
    my ($max_so_far) = shift @_;

๋ผ๊ณ  ๋˜์–ด ์žˆ๋Š”๋ฐ p82์˜ ๋งˆ์ง€๋ง‰์— ๋ณด๋ฉด ์„ค๋ช…๋˜์–ด ์žˆ์ง€๋งŒ ( )๋กœ ๋ฌถ์œผ๋ฉด ๋ชฉ๋ก๋ฌธ๋งฅ(list context) ์•„๋‹ˆ๋ฉด ์Šค์นผ๋ผ๋ฌธ๋งฅ(scalar context)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ๋Š” shift๋กœ ์„œ๋ธŒ๋ฃจํ‹ด์— ๋„˜์–ด์˜จ ์ธ์ž๋“ค์ด ๋‹ด๊ฒจ์žˆ๋Š” @_ ๋ฐฐ์—ด์—์„œ ๊ฐ’ํ•˜๋‚˜(์Šค์นผ๋ผ ๊ฐ’)์„ ๊บผ๋‚ด์„œ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— my ($max_so_far) = shift @_; ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค shift๋กœ ์Šค์นผ๋ผ๊ฐ’ ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ด์„œ ํ• ๋‹นํ•˜๋Š”๊ฒŒ ํ™•์‹คํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์จ์ฃผ๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

sub max {
    my $max_so_far = shift;

๊ทธ๋ฆฌ๊ณ  ๋ณดํ†ต @_๋ฐฐ์—ด์—์„œ ์ธ์ž๋ฅผ shift๋กœ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด ์“ธ๋•Œ๋Š” shift๋งŒ ์จ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ @_๋ฐฐ์—ด์—์„œ ๊บผ๋‚ด๋ฏ€๋กœ ๊ตณ์ด @_๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค. ์œ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์จ๋„ ๋ฉ๋‹ˆ๋‹ค.

sub max {
    my ($max_so_far) = @_;

์ด๊ฑด my ($max_so_far) ๊ฐ€ list context๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— @_๋ฐฐ์—ด์˜ ์ฒซ ์š”์†Œ๊ฐ€ $max_so_far์— ๋“ค์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Perl์ฝ”๋”ฉ๊ทœ์•ฝ์„ ๋‹ค๋ฃจ๋Š” Perl Best Practices( http://oreilly.com/catalog/9780596001735 )๋ผ๋Š” ์ฑ…์—๋Š” ์ธ์ž๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด @_์—์„œ ์ธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด์„œ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๊ฐ’์— ๋Œ€ํ•œ ์ฑ„ํฌ๋ฅผ ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์—๋งŒ shift๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ( ๋‹ค์Œ ์ฒ˜๋Ÿผ ์–ด๋–ค ์ธ์ž๋ฅผ ๋ฐ›์•„์„œ ์ฑ„ํฌํ•˜๊ณ  undefined๋ฉด ์–ด๋–ค ๊ธฐ๋ณธ๊ฐ’์„ ์ค„ ๋•Œ )

sub my_func {
    my $var1 = shift;
    my $var2 = shift || 'some text' ;   # ์—†์œผ๋ฉด 'some text'

๋ณดํ†ต ํ•˜๋‚˜์˜ ์ธ์ž๋งŒ ๋ฐ›๋Š” ๊ฒฝ์šฐ my $var = shift; ํ˜•์‹์„ ์ข…์ข… ์“ฐ๊ธฐ๋„ ํ•˜์ง€๋งŒ ์ € ๊ฐ™์€ ๊ฒฝ์šฐ ์œ„ ๊ฐ™์ด ์ธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด์„œ ์–ด๋–ค ์ฑ„ํฌ๊ฐ€ ํ•„์š” ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ธ์ž์˜ ๋ชฉ๋ก์ด ํ•œ๋ˆˆ์— ๋ณด์ด๊ฒŒ ์ผ๊ด€์ ์œผ๋กœ my (...) = @_ ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

sub my_func {
    my ($var) = @_;   # ํ•˜๋‚˜์˜ ์ธ์ž๋ฅผ ๋ฐ›์Œ
}

sub my_func2 {
   my ($var1, $var2) = @_;  # ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์Œ
}

p82 - ๋ ‰์‹œ์ปฌ(my) ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋…ธํŠธ

์ฝ”๋“œ์— my ($square) = $_ * $_; ๋„ ๊ตณ์ด ๊ด„ํ˜ธ๋ฅผ ๋„ฃ์ง€ ์•Š๊ณ  my $square = $_ * $_; ๋ผ๊ณ  ํ•ด์ฃผ๋Š”๊ฒŒ ๋” ์ ์ ˆํ•˜๊ฒ ์ฃ .

my๊ฐ™์€ ์‚ฌ์„ค๋ณ€์ˆ˜( lexical variable ), use strict ํ”„๋ž˜๊ทธ๋งˆ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•œ ๋ณด์ถฉ ์„ค๋ช…์€ "์ตœ์‹  ์Šคํƒ€์ผ Perl๋กœ ๊ฐœ๊ณผ์ฒœ์„ ํ•˜๊ธฐ"( https://github.com/aero/perl_docs/wiki/New_Perl_Korean_Perl_Workshop_2008 ) ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”. my, our, local ๊ฐ™์ด ๋ณ€์ˆ˜์˜ ์˜์—ญ๊ณผ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฒฐ์ •์ง“๋Š” ํ‚ค์›Œ๋“œ๋Š” ์ฐจ์ด์ ์ด ๋ญ”์ง€ ํ™•์‹คํ•˜๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„๋Œ€ Perl์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ

#!/usr/bin/env perl
use strict;
use warnings;

์ฒ˜๋Ÿผ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ๊ฑฐ์˜ ํ‘œ์ค€์ด๋‹ˆ ๊ผญ ๊ธฐ์–ตํ•˜๊ณ  ๋„ฃ๋„๋ก ํ•ฉ์‹œ๋‹ค. ์ด๋ ‡๊ฒŒ strict ํ”„๋ž˜๊ทธ๋งˆ๋ฅผ ์“ฐ๋ฉด ๋ณ€์ˆ˜๋Š” my,our,local ํ‚ค์›Œ๋“œ์ค‘ ํ•˜๋‚˜๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋„ฃ์–ด ์ž์‹ ์˜ ์ฝ”๋“œ์— ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋ฉด ๋‹น์‹ ์€ ์˜›๋‚  Perl์ฝ”๋“œ๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ ˆ๋Œ€ ์ด๊ฒƒ์„ ๋นผ์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค ํ•˜์ง€ ๋ง๊ณ , ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ํ˜„๋Œ€ Perl์— ๋งž๊ฒŒ ๊ณ ์น˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

p86 - return์— ๊ด€ํ•ด

"์–ด๋–ค ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ํ•ญ์ƒ return์„ ์‚ฌ์šฉํ•ด์„œ ๊ทธ ๊ฐ’์ด ๋ฐ˜ํ™˜ ๊ฐ’์ด ๋ผ๊ณ  ๋งˆ์น˜ ์„ค๋ช…์„ ๋‹ฌ๋“ฏ์ด ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. .... ํ•˜์ง€๋งŒ ๋งŽ์„ ํŽ„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ return์€ ์ผ๊ณฑ ๋ฌธ์ž๋ฅผ ๋” ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ผ ๋ฟ์ด๋ผ๊ณ  ๋ฏฟ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค." ๋ผ๋Š” ๋ง์ด ์žˆ๋Š”๋ฐ Perl ํ•จ์ˆ˜์—์„œ๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ํ‰๊ฐ€๋œ ๊ฐ’์ด ์ž๋™์œผ๋กœ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธด ํ•˜์ง€๋งŒ ์ด๋ง์€ ๋ฌด์‹œํ•˜์‹œ๊ณ  ํ•จ์ˆ˜์—์„œ ์–ด๋–ค ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ๋˜๋ฉด ๋ช…์‹œ์ ์œผ๋กœ return ๋ฌธ์„ ์จ์„œ ํ•˜๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค. Perl์—์„œ ํ•จ์ˆ˜์˜ ์ฒ˜์Œ๊ณผ ๋์„ ๊ฐ์‹ธ๋Š” { } ๋ธ”๋Ÿญ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŽ„์—์„œ ์“ฐ์ด๋Š” ์—ฌํƒ€ ๋ธ”๋Ÿญ๋“ค๋„ ๋…๋ฆฝ์ ์ธ ๋ ‰์‹œ์ปฌ์˜์—ญ(lexical scope)๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ธ”๋Ÿญ๋“ค์€ ๋ธ”๋Ÿญ์ด ๋๋‚  ๋•Œ ๋งˆ์ง€๋ง‰์— ํ‰๊ฐ€๋œ ๊ฐ’์„ ๋„˜๊น๋‹ˆ๋‹ค.

sub my_func {
      my ($var) = @_;
      return $var * $var; # ๊ทธ๋ƒฅ $var * $var ๋ผ๊ณ  ํ•ด๋„ ๋˜์ง€๋งŒ ๋ช…์‹œ์ ์œผ๋กœ return ํ•ด์ฃผ์ž!
}
my $str = do { local $/; <$fh> };  # $fh ํŒŒ์ผํ•ธ๋“ค๋กœ ์—ฐ ํŒŒ์ผ๋‚ด์šฉ ๋ชจ๋‘๊ฐ€ ๋„˜์–ด๊ฐ
my @new = map { $_ =~ s/A/a/g; $_ } @old;  # @old๋ฐฐ์—ด์— ๋‹ด๊ธด ์ŠคํŠธ๋ง๋“ค์—์„œ ๋ชจ๋“  ๋Œ€๋ฌธ์ž A๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พผ ๋ฌธ์ž์—ด์ด ์ฐจ๋ก€๋กœ ๋„˜์–ด๊ฐ

์ผ๋‹จ do ๋ธ”๋Ÿญ๊ณผ map ํ•จ์ˆ˜๋ฅผ ์ž˜ ๋ชจ๋ฅธ๋‹ค ์ณ๋„ ํ•ด๋‹น ๋ธ”๋Ÿญ๋“ค์˜ ๋งˆ์ง€๋ง‰ ํ‰๊ฐ€๊ฐ’ <$fh>, $_ ๊ฐ€ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•ž์˜ ์„ค๋ช…์„ ํ†ตํ•ด ์ง์ž‘๊ฐ€๋Šฅํ•  ๊ฒ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋‘์ค„๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ simpleํ•œ ๋ธ”๋Ÿญ์—์„œ๋Š” ๋ธ”๋Ÿญ์˜ ๋งˆ์ง€๋ง‰ ํ‰๊ฐ€๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๋Š” ํ…Œํฌ๋‹‰์„ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜์—์„œ๋Š” ํ•จ์ˆ˜ ์ค‘๊ฐ„ ๋ถ€๋ถ„๋“ฑ์—์„œ๋„ return ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ญ์ƒ ๋ช…์‹œ์ ์œผ๋กœ returnํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋‚˜์ค‘์—๋ผ๋„ ํ•จ์ˆ˜์˜ ์–ด๋””์—์„œ ๋น ์ ธ๋‚˜๊ฐ€๋Š”์ง€ ๋“ฑ์˜ ํ•จ์ˆ˜์˜ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

5์žฅ - ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ

p111 - ํŒŒ์ผ ํ•ธ๋“ค ์—ด๊ธฐ

open CONFIG, "<dino";
open LOG, ">>logfile";

print LOG "some text\n";

๊ฐ™์€ ํ˜•์‹์˜ bareword(์ธ์šฉ๋ถ€ํ˜ธ๋กœ ๊ฐ์‹ธ์ง€ ์•Š์€ ๋ฌธ์ž์—ด - ์œ„์—์„œ CONFIG,LOG)ํŒŒ์ผํ•ธ๋“ค๊ณผ 2์ธ์ž ํ˜•์‹์˜ open๋ฌธ์€ ์˜›๋‚ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ˜„๋Œ€์  ์Šคํƒ€์ผ์€ lexical ๋ณ€์ˆ˜ ํŒŒ์ผํ•ธ๋“ค์— 3์ธ์ž ํ˜•์‹ open์„ ์“ฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 4์žฅ ๋ฆฌ๋ทฐ ๋งˆ์ง€๋ง‰์— ๋งํฌ๊ฑด ๋ฌธ์„œ์— ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ( ์ถ”๊ฐ€์ฐธ๊ณ : https://www.socialtext.net/perl5/index.cgi?bareword_uppercase_filehandles , https://www.socialtext.net/perl5/index.cgi?two_argument_open )

open my $CONFIG, '<', 'dino';
open my $LOG, '>>', 'logfile';

print {$LOG} "some text\n";  # openํ•œ $LOG ํŒŒ์ผํ•ธ๋“ค์— ์ฐ๊ธฐ

์—ฌ๊ธฐ์„œ bareword ๋ฅผ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ด…์‹œ๋‹ค.

bareword ( https://www.socialtext.net/perl5/index.cgi?bareword )๋ฅผ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด "๋‚˜'๋“ฑ์˜ ์ธ์šฉ๋ถ€ํ˜ธ๋กœ ๊ฐ์‹ธ์ง€ ์•Š์€ ๋ฒŒ๊ฑฐ๋ฒ—์€? ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์— ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค. "์•ŒํŒŒ๋ฒณ๋Œ€์†Œ๋ฌธ์ž,_ ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ ๊ทธ ๋’ค๋Š” ์•ŒํŒŒ๋ฒณ๋Œ€์†Œ๋ฌธ์ž,_,์ˆซ์ž์˜ 3๊ฐ€์ง€์˜ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค"

abc1      O
_a_b      O
_1ab      O
1abc      X
_a1_      O

๊ทธ๋Ÿฌ๋ฉด bareword๊ฐ€ ์™œ ์ค‘์š”ํ•˜๋ƒ?

ํŽ„์—์„œ ๋ณ€์ˆ˜์ด๋ฆ„์ด๋‚˜ ํ•จ์ˆ˜์ด๋ฆ„ ๋“ฑ์—์„œ ์ด๋ฆ„์„ ์‹๋ณ„์ž(identifier)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‹๋ณ„์ž๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ์ด๋ฆ„ํ‘œ๊ฐ™์€ ๊ฒƒ์ด๋ฉฐ ์˜ˆ๋ฅผ ๋“ค๋ฉด ์Šค์นผ๋ผ๋ณ€์ˆ˜ $my_var์—์„œ my_var๊ฐ€ ์‹๋ณ„์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. sub my_func { ...}๊ฐ™์€ ํ•จ์ˆ˜์—์„œ๋Š” my_func๊ฐ€ ์‹๋ณ„์ž๊ฐ€ ๋˜์ง€์š” perl์€ ์Šค์นผ๋ผ๋ณ€์ˆ˜๋Š” ์‹๋ณ„์ž ์•ž์— $, ๋ฐฐ์—ด์€ @, ํ•ด์‹œ๋Š” % ๊ฐ™์€(ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ &๋ฅผ ์•ž์— ๋ถ™์ธ๊ฒƒ์œผ๋กœ ์ธ์‹) sigil์„ ๋ถ™์—ฌ์„œ ๋ณ€์ˆ˜๋ผ๊ณ  ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ sigil์ด ์—†๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ๋‹ฌ๋ฆฌ Perl์€ ๊ฐ™์€ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๋Š” ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜( $abc, @abc, %abc, sub abc { ... } )๊ฐ€ ๋™์‹œ์— ์กด์žฌ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ •๋ฆฌํ•˜๋ฉด ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ช…์€ sigil+identifier(์‹๋ณ„์ž) ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ . ๊ทธ๋Ÿฐ๋ฐ ์žฌ๋ฏธ์žˆ๋Š”๊ฑด identifier์˜ ์ด๋ฆ„๊ทœ์น™์ด bareword ์ด๋ฆ„๊ทœ์น™๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋ช…์€ bareword์™€ ๊ฐ™์€ "์•ŒํŒŒ๋ฒณ๋Œ€์†Œ๋ฌธ์ž,_ ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ ๊ทธ ๋’ค๋Š” ์•ŒํŒŒ๋ฒณ๋Œ€์†Œ๋ฌธ์ž,_,์ˆซ์ž์˜ 3๊ฐ€์ง€์˜ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค"

$ab2   # O
$1bc   # X
@_a_   # O
%A__   # O

์—ฌ๊ธฐ์—์„œ ์ฃผ์˜ํ•ด์•ผ ํ•  ๊ฒƒ์€ identifier์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 251์ž ๋ผ๋Š” ๊ฒ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด 251์ž๊ฐ€ ๋„˜์–ด๊ฐ€๋Š” ๋ณ€์ˆ˜๋ช…์ด๋‚˜ ํ•จ์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋˜๊ฒ ์ฃ . ๊ทธ๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ผ๋„ ์—†๊ฒ ์ง€๋งŒ์š”.

๊ทธ๋ฆฌ๊ณ  ๋˜ ํ•˜๋‚˜ ์ฃผ์˜ํ•ด์•ผ ๋˜๋Š” ๊ฒƒ์€ identifier๊ฐ€ ๋‚˜์ค‘์— ํ•ด์‹œ๋ผ๋Š” ๊ฑธ ๋ฐฐ์šธ๋•Œ ํ•ด์‹œํ‚ค์— bareword๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ทœ์น™์—๋„ ๋˜‘ ๊ฐ™์ด ์ ์šฉ๋œ๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•ด์‹œ์—์„œ ๋‹ค์‹œ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.

p 115 - die๋กœ ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ

p116์—

if ( ! open LOG, ">>logfile" ) {
    die "Cannot create logfile: $!";
}

์ด๋Ÿฐ์‹์œผ๋กœ ํŒŒ์ผ open์‹œ ์—๋Ÿฌ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฑด ์–ด๋””์„œ ๋‚˜์˜จ ํ•ด๊ดดํ•œ ์ฝ”๋“œ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๊ตฐ์š”. ์ €๊ฒƒ์„ ํ˜„๋Œ€์  ์Šคํƒ€์ผ๊ณผ ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ”๊พธ๋ฉด

open my $LOG, '>>', 'logfile' or die "Cannot create logfile : $!";

ํ˜•์‹์œผ๋กœ ์”๋‹ˆ๋‹ค. or ์—ฐ์‚ฐ์ž๋Š” ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ์—ฐ์‚ฐ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— or ์•ž์ชฝ์˜ open๋ฌธ์ด ์‹คํŒจํ•˜๋ฉด ๋’ค์˜ die๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. Perl 5.10 ์ด์ƒ์—์„œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ use autodie; ๋ผ๋Š” ํ”„๋ž˜๊ทธ๋งˆ( http://search.cpan.org/perldoc?autodie )๋ฅผ ์“ฐ๋ฉด ๋”ฐ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ die๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ open์‹œ ์‹คํŒจํ•˜๋ฉด ์ž๋™์œผ๋กœ dieํ•˜๋ฉด์„œ ์—๋Ÿฌ๋ฉ”์‹œ์ง€๋ฅผ ๋ฟŒ๋ ค์ค๋‹ˆ๋‹ค.

use autodie;

open my $LOG, '>>', 'logfile';

๋ฒˆ์™ธํŽธ

ํŒŒ์ผํ•ธ๋“ค์— ์–ด๋–ค ๋ฌธ์ž์—ด์„ ์“ธ๋•Œ print $fh "some text\n"; ๋ผ๊ณ  ํ•ด๋„ ๋˜์ง€๋งŒ Perl Best Practices์—์„œ๋Š” ํŒŒ์ผํ•ธ๋“ค์— { }๋ฅผ ๋ฌถ์–ด print {$fh} "some text\n"; ํ˜•์‹์œผ๋กœ ์”๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ํŒŒ์ผํ•ธ๋“ค์ด ์–ด๋–ค @fh ๋ผ๋Š” ๋ฐฐ์—ด์— ๋‹ด๊ฒจ์žˆ๋‹ค๊ณ  ํ–ˆ์„๋•Œ ์ฒซ๋ฒˆ์งธ ํŒŒ์ผํ•ธ๋“ค์ธ $fh[0]์— ์“ฐ๊ฒ ๋‹ค๊ณ  print $fh[0] "some text\n";๋ผ๊ณ  ํ•˜๋ฉด ์›ํ•˜๋Š” ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋ฐ ์ด๋Ÿด๋•Œ๋Š” ์ž„์‹œ ์Šค์นผ๋ผ๋ณ€์ˆ˜์— $fh[0]์„ ๋‹ด์•„์„œ ์จ๋„ ๋˜์ง€๋งŒ ๋ฐ”๋กœ print {$fh[0]} "some text\n"; ๋ผ๊ณ  ํ•˜๋ฉด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ print ๋ฌธ์ด ๋งˆ์น˜ ๊ฐ„์ ‘๊ฐ์ฒด ํ˜ธ์ถœํ˜•์‹(indirect object notation)์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ ๊ฐ„์ ‘๊ฐ์ฒด ํ˜ธ์ถœํ˜•์‹์€ [ํ•จ์ˆ˜๋ช…] [๊ฐ์ฒด] [์ธ์ž] ํ˜•์‹์œผ๋กœ ์“ฐ๋ฉด ๊ฐ์ฒด์˜ ํ•จ์ˆ˜๋ช…์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ์ฒด์˜ ์œ„์น˜์— ์˜ค๋Š” ๊ฒƒ์ด bareword๋‚˜ ์ˆœ์ˆ˜ํ•œ ์Šค์นผ๋ผ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ { }๋กœ ๋ฌถ์–ด์ค˜์•ผ ๊ฐ์ฒด๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ print,printf,say๋ฌธ ๋“ฑ์— ๋ ‰์‹œ์ปฌ ํŒŒ์ผํ•ธ๋“ค์„ ์ง€์ •ํ•ด์ค„ ๊ฒฝ์šฐ ํ•ญ์ƒ { }๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๊ฒƒ์ด ์‹œ๊ฐ์ ์œผ๋กœ๋„ ๊ตฌ๋ณ„์ด ์‰ฝ๊ณ  ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ผ๊ด€์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ข‹์Šต๋‹ˆ๋‹ค.

6์žฅ - ํ•ด์‹œ

p129

ํ•ด์‹œ๊ฐ’์„ ๋‹ค์Œ์ฒ˜๋Ÿผ $family_name{"fred"} = "flintstone"; ์„ค์ •ํ• ๋•Œ { } ์•ˆ์˜ ํ•ด์‹œํ‚ค๋ฅผ "fred" ์ฒ˜๋Ÿผ ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์—ˆ๋Š”๋ฐ ์—ฌ๊ธฐ๋Š” bareword๊ฐ€ ์˜ค๋ฉด ์ž๋™์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•˜๋ฏ€๋กœ ๊ตณ์ด " "๋‚˜ ' '๊ฐ™์€ ์ธ์šฉ๋ถ€ํ˜ธ๋กœ ๋ฌถ์„ ํ•„์š”๊ฐ€ ์—†์ด $family_name{fred} = 'flintstone'; ์ฒ˜๋Ÿผ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹จ ํ‚ค๋กœ ์“ฐ์ด๋Š” ๋ฌธ์ž์—ด์— ๊ณต๋ฐฑ์ด ๋‚˜ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ์˜คํ•ด๋  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜๋ฌธ์ž๋“ฑ์ด ํฌํ•จ๋œ ๋ฌธ์ž์—ด ์˜ˆ๋ฅผ ๋“ค๋ฉด $a๊ฐ™์€ ๋ณ€์ˆ˜ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์„ ๋ณด๊ฐ„(interpolation)๋œ ๋ณ€์ˆ˜ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ํ‚ค๋ฅผ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ํ‚ค๋กœ ์“ฐ๊ณ ์ž ํ•˜๋ฉด ๋‹ค์Œ ์ฒ˜๋Ÿผ ํ•ด์•ผ๋˜๊ฒ ์ฃ 

$hash{'text with space'} = 1;
$hash{'$a'} = 2;
$hash{'@_@'} = 3;
$hash{'^_^'} = 4;
$hash{'2.0'} = 5;  # $hash{2.0} = 5; ๋ผ๊ณ  ํ•˜๋ฉด ํ•ด์‹œํ‚ค๋Š” ๋ฌธ์ž์—ด์ด๋‚˜ ์ˆซ์ž 2.0์ด ๋ฌธ์ž์—ดํ™” ๋˜์–ด 2๊ฐ€ ๋˜์–ด ํ•ด์‹œํ‚ค๊ฐ€ ๋ฌธ์ž์—ด 2๊ฐ€ ๋จ

์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต์˜ ๊ฒฝ์šฐ ๊ตณ์ด ํ‚ค๋ฌธ์ž์—ด์„ ์ผ์ผ์ด ์ธ์šฉ๋ถ€ํ˜ธ๋กœ ๊ฐ์‹ธ์ฃผ๋Š” ๊ฑด ๋ถˆํ•„์š”ํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ž ๊น! 5์žฅ์—์„œ ์„ค๋ช…ํ•œ bareword์˜ ๊ทœ์น™์ด ํ•ด์‹œํ‚ค์—์„œ bareword๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ hash ํ‚ค๋ฅผ bareword๋กœ ์‚ฌ์šฉํ• ๋•Œ ๊ทธ ๊ทœ์น™์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฒฝ์šฐ๋„ ์ธ์šฉ๋ถ€ํ˜ธ๋กœ ๊ผญ ๊ฐ์‹ธ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ bareword๋กœ ์ง€์ •ํ•˜๋Š” ํ•ด์‹œํ‚ค์˜ ์ตœ๋Œ€ ๊ธธ์ด๋„ 251์ž๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.( ์ธ์šฉ๋ถ€ํ˜ธ๋กœ ๋ฌถ์€ ํ•ด์‹œํ‚ค ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์—๋Š” ์ด๋Ÿฐ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.)

$hash{1ab} = 1;   # ์—๋Ÿฌ
$hash{'1ab'} = 1;   # ์ˆซ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ํ•ด์‹œํ‚ค๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•  ๋•Œ ์ด๋Ÿฌํ•œ ์ œ์•ฝ์‚ฌํ•ญ์„ ๋งŒ๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œํ‚ค๋ฅผ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด barewordํ˜•ํƒœ๋กœ ์“ฐ๋Š” ๊ฒƒ์ด ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค.

p130

์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ์˜ ์ฒซ์ค„

foreach $person (qw< barney fred >) {
...

์€ ๋ฃจํ”„์— ์“ฐ์ด๋Š” ์ž„์‹œ๋ณ€์ˆ˜๋กœ ๊ทธ๋ƒฅ $person์„ ์“ฐ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋ฃจํ”„์— ํ•œ์‹œ์ ์œผ๋กœ ์“ฐ์ด๋Š” ๋ณ€์ˆ˜๋Š” ์•ž์—์„œ ๋ฐฐ์šด my๋ณ€์ˆ˜๋ฅผ ์“ฐ๋Š”๊ฒŒ ์ •์„์ž…๋‹ˆ๋‹ค. ( qw์—ฐ์‚ฐ์ž์™€ ๊ฐ™์ด ์“ฐ๋Š” ๊ตฌ๋ถ„์ž๋„ ์ œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ ํ˜ธํ•˜๋Š” /๋กœ ๋ฐ”๊พธ๋ฉด )

foreach my $person (qw/barney fred/) {
...

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฃจํ”„ ์ด์ „์— $person์ด๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ •์˜ ๋˜์—ˆ๋‹ค๊ณ  ํ•ด๋„ ๋ฃจํ”„๋‚ด์—์„œ๋Š” ์ด์ „์— ์ •์˜๋œ ๊ฒƒ๊ณผ ์ƒ๊ด€์—†์ด ๋…๋ฆฝ์ ์ธ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์„œ๋กœ ์ „ํ˜€ ๊ฐ„์„ญ์ด ์—†๊ณ  ์˜ํ–ฅ๋„ ๋ฏธ์น˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Python์ด๋‚˜ Ruby์—๋Š” ์—†๋Š” my๋กœ ์ •์˜๋˜๋Š” ๋ ‰์‹œ์ปฌ๋ณ€์ˆ˜์˜ ์ถ•๋ณต์ด์ฃ  :)

p133 ํฐํ™”์‚ดํ‘œ

%some_hash = ( "foo", 35, "bar", 12.4 ); ๊ฐ™์€ ํ•ด์‹œ์ •์˜๋ฅผ =>์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ %some_hash = ( foo => 35, bar => 12.4);๋กœ ๋ฐ”๊ฟ” ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฑ…์—์„œ๋Š” foo๋‚˜ bar๊ฐ™์€ ํ•ด์‹œํ‚ค์— %some_hash = ( "foo" => 35, "bar" => 12.4); ์ฒ˜๋Ÿผ ์ธ์šฉ๋ถ€ํ˜ธ๋ฅผ ๊ฐ์‹ธ๋†จ์ง€๋งŒ =>์—ฐ์‚ฐ์ž๋Š” ์™ผ์ชฝ์— ์˜ค๋Š” bareword๋Š” ์ธ์šฉ๋ถ€ํ˜ธ๋กœ ๊ฐ์‹ธ์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋ฌธ์ž์—ดํ™” ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ž์—์„œ { }์•ˆ์— bareword ํ•ด์‹œํ‚ค๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ ์ฒ˜๋Ÿผ ์˜ˆ์™ธ์ ์ธ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ตณ์ด ์ธ์šฉ ๋ถ€ํ˜ธ๋กœ ๊ฐ์Œ€ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜๋ฉด =>๋Š” ์ž์‹ ์˜ ์™ผ์ชฝ์— ์˜ค๋Š” bareword๋ฅผ ์ž๋™์œผ๋กœ ๋ฌธ์ž์—ดํ™” ํ•œ๋‹ค๋Š” ๊ฒƒ ๋นผ๊ณ ๋Š” ,์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด print 'a','b','c','d';๋Š” ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ์ง€ ๋ชจ๋ฅด์ง€๋งŒ print a=>b=>c=>'d';๋กœ ์จ๋„ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฑฐ์ฃ .

๊ทธ๋ฆฌ๊ณ  Perl์—์„œ -๊ฐ€ bareword ์•ž์— ์˜ค๋ฉด ๋‘˜์ด ๊ฒฐํ•ฉ๋œ ๋ฌธ์ž์—ด์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ (-width => 200, -height => 300) ๊ฐ™์€ ํ˜•์‹์˜ ํ‚ค๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํ˜•์‹์˜ ํ‚ค๋Š” ๋“œ๋ฌผ๊ฒŒ CGI๋ชจ๋“ˆ์ด๋‚˜ Tk ๋ชจ๋“ˆ๋“ฑ์—์„œ ์ธ์ž๋ฅผ ๋‚˜๋ฆ„๋Œ€๋กœ ๊ทœ์น™์— ์˜ํ•ด ์ฑ„ํฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ํ•ด์‹œํ˜•ํƒœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„˜๊ฒจ์ค„ ๋•Œ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  bareword ์•ž์— +๋ฅผ ๋ถ™์ด๋ฉด ํ•ด๋‹น bareword๋ฅผ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ํ•ด๋‹น ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋กœ ์ธ์‹ํ•˜์—ฌ ํ•จ์ˆ˜ํ˜ธ์ถœ์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ทจํ•ฉ๋‹ˆ๋‹ค.

my $var1 = $hash{shift};   #  shift๋Š” ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ์˜ ํ‚ค์ด๋ฆ„
my $var2 = $hash{+shift}; #  my $var2 = $hash{shift()}; ๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋กœ shift ํ•จ์ˆ˜๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ @_๋ฐฐ์—ด์—์„œ shiftํ•œ๊ฐ’์„ ํ‚ค๋กœ ์‚ฌ์šฉ

p136

each ์˜ˆ์ œ์ฝ”๋“œ ์ฒซ์ค„

while ( ($key, $value) = each %hash ) {
...

๋„ ๋ฃจํ”„๋‚ด์—์„œ ํ•œ์ •์ ์ธ my ๋ณ€์ˆ˜๋ฅผ ์จ์„œ

while ( my ($key, $value) = each %hash ) {
...

ํ˜•์‹์œผ๋กœ ์“ฐ๋Š”๊ฒŒ ์ •์„์ž…๋‹ˆ๋‹ค. my๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฅด์ณ์ค˜ ๋†“๊ณ  ํ›„์†๋˜๋Š” ์ฝ”๋“œ๋“ค์— ์™œ ์ด๋Ÿฐ ํ˜•์‹์œผ๋กœ ์•ˆ์จ๋†จ๋Š”์ง€ ๊ฐœ์ธ์ ์œผ๋กœ ๋ถˆ๋งŒ์ด๊ตฐ์š”. ์ดํ›„์—๋„ ๊ณ„์† ๊ทธ๋Ÿฐ์‹์˜ ์ฝ”๋“œ๋“ค์ด ๋‚˜์˜ค๋Š”๋ฐ ๋ฃจํ”„๋‚ด์— ํ•œ์ •๋˜์–ด ์“ฐ์ด๋Š” ๋ณ€์ˆ˜์—๋Š” ๊ผญ my๋ฅผ ์“ฐ๋„๋ก ํ•ฉ์‹œ๋‹ค. ๋ญ ์ œ๊ฐ€ ๋”ฐ๋กœ ๋ง ์•ˆํ•ด๋„ ์•ž์—์„œ ๋งํ–ˆ๋˜ use strict; ํ”„๋ž˜๊ทธ๋งˆ๋ฅผ ์“ฐ๋ฉด ์•Œ์•„์„œ ์—๋Ÿฌ๋‚ ํ…Œ์ง€๋งŒ์š”~

๋ฒˆ์™ธํŽธ

์ฑ…์˜ ๋’ท์ชฝ์—์„œ ๋‹ค๋ฃจ๋Š” ๊ณ ๊ธ‰์ฃผ์ œ์ง€๋งŒ ๋ฏธ๋ฆฌ ์„ค๋ช…๋“œ๋ฆฌ๋ฉด ์•ž์—์„œ ๋ฐฐ์šด ๋ฐฐ์—ด ์Šฌ๋ผ์ด์Šค์™€ ๋น„์Šทํ•œ ํ•ด์‹œ ์Šฌ๋ผ์ด์Šค๋ผ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. my %hash = ( a=>1, b=>2, c=>3, d=>4);์—์„œ ํ‚ค a,c,d์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ฝ‘์•„๋‚ด๋ ค๋ฉด my @values = ( $hash{a}, $hash{c}, $hash{d} ); ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ํ•ด์‹œ ์Šฌ๋ผ์ด์Šค๋กœ ์ค„์—ฌ์“ฐ๋ฉด my @values = @hash{'a','c','d'}; ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑด my @values = @hash{qw/a c d/};๋ผ๊ณ  ํ•ด๋„ ๋˜๋Š” ๊ฑด ์„ผ์Šค๊ฐ€ ์ข€ ์žˆ์œผ์‹œ๋ฉด ๋ณ„ ๋ฌด๋ฆฌ์—†์ด ์ดํ•ด๋˜์‹ค๋“ฏ..

ํ•ด์‹œ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ์œผ์‹œ๋ฉด http://perl101.org/hashes.html์„ ๋ณด์„ธ์š”

์ด ์ฑ…์— ์—†๋Š” ๊ฒƒ

Learning Perl 5ํŒ์€ ์ข‹์€์ฑ…์ด์ง€๋งŒ Perl์„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•„์š”ํ•˜๊ณ  ์ดํ•ดํ•ด์•ผํ•˜๋Š” ๋ ˆํผ๋Ÿฐ์Šค( http://perldoc.perl.org/perlreftut.html , http://perldoc.perl.org/perlref.html )์™€ ๋ณต์žกํ•œ ์ž๋ฃŒ๊ตฌ์กฐ( http://perldoc.perl.org/perldsc.html ), ๋ชจ๋“ˆ์˜ ์›๋ฆฌ, ๊ฐ์ฒด์ง€ํ–ฅ(OOP) ๋“ฑ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ฑ…์„ ๋‹ค ๋ดค๋‹ค๊ณ  Perl์„ ๋‹ค ๊ณต๋ถ€ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ์ด ์ฑ… ๋‹ค์Œ์œผ๋กœ ๋ณด๋„๋ก ๊ธฐํš๋œ ์ฑ…์ด Intermediated Perl ( http://oreilly.com/catalog/9780596102067 ) ์ด๋ž€ ์ฑ…์ž…๋‹ˆ๋‹ค. ์ด ์ฑ…์€ ์•ฝ๊ฐ„ ์˜ค๋ž˜๋๊ณ ( ๊ฐœ์ •ํŒ์„ ์ค€๋น„์ค‘์ด๋ผ๋Š” ์†Œ๋ฌธ์ด ์žˆ์Œ) ๋ฒˆ์—ญ์„œ๊ฐ€ ์—†์œผ๋‹ˆ ์˜๋ฌธ์„ ๋ณด์…”์•ผ ํ•˜๋ฉฐ, ๊ฐœ์ธ์ ์œผ๋กœ Learning Perl 5ํŒ์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š์€ Perl ์ „๋ฐ˜์„ ๋‹ค๋ฃจ๋Š” ์ฑ…์œผ๋กœ ์ €๋Š” ๋ฌด๋ฃŒ๋กœ ๊ณต๊ฐœ๋œ Beginning Perl( http://www.perl.org/books/beginning-perl/ ) ๊ณผ ์ตœ๊ทผ์— ๋‚˜์˜จ ๋ฌด๋ฃŒ์ฑ… Modern Perl ( http://www.onyxneon.com/books/modern_perl/index.html )์„ ๋ณด์‹œ๊ธธ ์ถ”์ฒœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ์— ๋ชจ๋“  ์ •๋‹ต์€ perldoc( http://perldoc.perl.org/ )๋ฌธ์„œ์— ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ๋ช…์‹ฌํ•˜์‹œ๊ณ ~

์ถ”๊ฐ€ ์ฐธ๊ณ  ๋ฌธ์„œ

์˜๋ฌธ

ํ•œ๊ธ€

Feedback

๋ณด์‹œ๊ณ  ๊ถ๊ธˆํ•˜์‹œ๊ฑฐ๋‚˜ ํ•˜๊ณ  ์‹ถ์€๋ง์ด ์žˆ์œผ์‹œ๋ฉด https://github.com/aero/perl_docs/issues ์— ๋‚จ๊ฒจ์ฃผ์„ธ์š”.