Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
はてなリモートインターン2021 Perlブートキャンプ 講義資料
Search
Hatena
October 08, 2021
Technology
0
5.2k
はてなリモートインターン2021 Perlブートキャンプ 講義資料
https://hatenacorp.jp/recruit/intern/2021
Hatena
October 08, 2021
Tweet
Share
More Decks by Hatena
See All by Hatena
はてなインターンシップ2024 HTTP, Web, API 講義資料
hatena
0
930
はてなインターンシップ2024 RDBMS ブートキャンプ講義資料
hatena
0
730
はてなインターンシップ2024 フロントエンドブートキャンプ講義資料
hatena
0
650
はてなインターンシップ2024 コンテナ講義資料
hatena
0
720
はてなインターンシップ2024 コンテナオーケストレーション講義資料
hatena
0
640
はてなインターンシップ2024 インフラ講義資料
hatena
0
660
はてなインターンシップ2024 AI 講義資料
hatena
0
640
はてなインターンシップ2024 ブログライティング講義資料
hatena
4
2.4k
はてなリモートインターンシップ2023 Web, HTTP 講義資料
hatena
1
480
Other Decks in Technology
See All in Technology
SDNという名のデータプレーンプログラミングの歴史
ebiken
PRO
2
200
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
140
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
130
SSMRunbook作成の勘所_20241120
koichiotomo
3
180
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
200
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
650
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
160
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
420
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
1k
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
150
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
430
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
600
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Visualization
eitanlees
145
15k
Building Your Own Lightsaber
phodgson
103
6.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Building an army of robots
kneath
302
43k
Embracing the Ebb and Flow
colly
84
4.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Transcript
)BUFOB3FNPUF*OUFSOTIJQ &9铺紶 1FSMه٭ع؞ٔ٤و JEUL[XULT悂很㼵
舅䄕磆☭ ˝ JEUL[XULT悂很㼵 ˝ 䇗僖⪌炘 ˝ 哅ⳉ塷 ˝ ؠّٙ ˝
(JHB7JFXFS ˝ עיםرؕؓٛ٭磙▼ ˝ 뇧嫎סJ؆ל
1FSM鐆؆ד׆כ傴ַג׆כֵױ ־
1FSM
1FSM 1FSMق٭ٜכעյٚٛ٭٬ؚؗ٭ٜמזיꝧ氦גوٞ ءِٚ٤ء銧鏤ךֵն㲔榫䓪כ㛡喋䓪ꄆ釱יֽյ$銧鏤 TFEյBXLյبؘٜتؠٛوعםל☽סوٞءِٚ٤ء銧鏤ס⨣ ג嚀耆⪌יַնؘؗه٬ؓوٛآ٭ب٘٤յبتط ّ畘杼յط؞تع⭚杼םלסوٞءّٚ傴ׂסמ䇶ׂ榫ַ יַն
1FSM ˝ (Pכ鷿זיյؤ٤قٜؕםַؕ٤ذوٛذ㑔銧鏤 ˝ #FUUFSTIFMMכי✳ֻյؘؗهؓوٛآ٭ب٘٤ 傴ׂ׆כדזיך׀ ˝ 碛企ַؘؗهꝧ氦ס鷹⪮כיյׂ־☔妳ס-JHIUXFJHIU -BOHVBHF ˝
עים%F/"NJYJ-*/& ˝ ײם؆ֿ鿥㷯◀㲊סز٭ّך
إ٭ٜ 侇ꝴ䍚ךր1FSM㱭⪒מ杼鉮גցמם
إ٭ٜ סעה؆ꦘַסך ˝ 仴㰆סؤ٭غ鐆׳ג״סז䫇־ֿ⛼ֹמם ˝ ㍭זגכ׀סؕ٤ظشؠتכי ˝ ⼽סؤ٭غ⹆縒מםֿ1FSMֿ傴ֹׄמם
1FSMמ鉴יַׂ⯥מ
غ؞ْٖ٤عעQFSMEPDך䌕ׂ % perldoc Carton # Ϟδϡʔϧʢޙड़ʣͷυΩϡϝϯτ % perldoc -f print
# ΈࠐΈؔ -f % perldoc -v !" # ΈࠐΈม -v % perldoc perl
$1"/ ˝ 5IF$PNQSFIFOTJWF1FSM"SDIJWF/FUXPSL ˝ IUUQTNFUBDQBOPSH ˝ ┩槡╈סױױם1FSMٓةٖ٭ֿٜױזיַ ˝ 1FSMס銧鏤氳ם䍚ײס┉חؤِٖؼطؔ
$BSUPO ˝ 3VCZךַֹ#VOEMFSײגַםס ˝ cpanfileמ傴ַגٓةٖ٭ٜ⺲!ف٭ة٘٤յٞ٭ٜס ظؔٝؠعٛlocal/מؕ٤تع٭ٜיׂ ˝ ز٭ّךע%PDLFS✳ֹסךֵױゖ갭מעםםַ־
1FSMכַֹ銧鏤
˝ ٓةٖ٭ٜ package Example!"Greeter; use strict; use warnings; sub greet
{ my ($class, $what) = !#; print "hello, $what\n"; } 1;
˝ ْؕ٤تؠٛوع use strict; use warnings; use lib 'lib'; use
Example!"Greeter; Example!"Greeter!#greet('world'); ˝ 㲔车 % perl -Ilib main.pl hello, world
ֽױםַ ˝ VTFTUSJDUVTFXBSOJOHT ˝ 碛ס1FSMע־ם舅榺 ˝ VTFTUSJDUכNZך㲚銧יַםַ㚺丗ֵֿכꪐ氳מ ؙٚ٭ ˝ VTFXBSOJOHTכ閛⼔ֿ僗Ⲗמם
˝ 鎋ׂעQFSMEPDTUSJDUQFSMEPDXBSOJOHT
㚺丗 ˝ 1FSMס㚺丗עյאסظ٭ذ㑔מ䑴יبةٜכ⽛ף鋗⺘ֿ ⩝מחׂ ˝ my $hogeסֹמי㚺丗㲚銧 ˝ ꪐ氳ם㑔עםַ ˝
$@%
تٚ ˝ חס⡁ ˝ 丗㰄乃㰄⮛יتٚ my $scalar1 = 'test'; my
$scalar2 = 1000; my $scalar3 = \@array; # ϦϑΝϨϯεʢޙड़ʣ ˝ 狜乃㰄⮛עGBMTZם⡁כי䣽 ˝ GBMTZ
VOEFG ˝ تٚ㚺丗ס⮣僿⡁ ˝ ַVOEFOFEכ־OJMכ־ ˝ EFOFE磝ײ鱮ײ㚺丗ךVOEFG־לֹ־زؘشؠך׀ my $x; print
$x; # "Use of uninitialized value $x in print"
!鿥⮛ my @array = ('a', 'b', 'c');
鿥⮛סؓؠجت print $array[1]; # !" b ˝ 鿥⮛סַה釐碛עتٚםסךյؓؠجت㕙⺬עBSSBZ<> מם ˝
BSSBZכ!BSSBZע⮯擻
鿥⮛ס䳩⛼ $array[0]; # get $array[1] = 'hoge'; # set push
@array, 'meow'; # ࠷ޙʹཁૉΛՃ my $v = shift @array; # ࠷ॳͷཁૉΛऔΓআ͍ͯฦ͢ my $length = scalar @array; # ͞ for my $e (@array) { # શཁૉϧʔϓ print $e; }
鿥⮛ס䳩⛼ my @doubles = map { $_ * 2 }
@numbers; # ͯ͢Λ2ഒʹͨ͠ྻΛ࡞Δ my @over20 = grep { $_ > 20 } @numbers; # 20ΑΓେ͖ͳ͚ͩΛूΊͨྻΛ࡞Δ ˝ $_ע攐墤㚺丗 ˝ ׆ס㕙⺬ךע鿥⮛ס⺨釐碛ֿꯂמ⭳י⪌זיׂ
ـشبٖ ˝ ַظؔؠب٘ػُٛشو my %hash = ( perl !" 'larry',
ruby !" 'matz', ); ˝ עGBUDPNNBכ⽛ףյ QFSMMBSSZ ע QFSM MBSSZ כ⺱┉ ˝ ⺓鱨ע鿥⮛סכ׀כ⺱喋םٛتعדֿյל؆ם㚺丗מ劲硯 ־ךؓؠجتס☼亠ֿ㚺 ˝ ؤ٤ط؞تع
ٛنؒٝ٤ت ˝ כיꄆ釐 ˝ ٛنؒٝ٤تتٚ鿥⮛ـشبٖםלס⹆拨 ˝ 1FSMס鿥⮛ـشبٖע־ם碛儢 ˝ 邾ꥭםظ٭ذ啶鵰⛼㕙⺬מ䑒䑒釐מם
ٛنؒٝ٤ت ˝ ⪌㯸ס车⮛⛼זיײ־ my @matrix = ( (0, 1, 2,
3), (4, 5, 6, 7), ); ˝ ׆סؤ٭غע鿥⮛ס⺬䡗מם ˝ ٛتع⪌㯸מך׀םַ my @matrix = (0, 1, 2, 3, 4, 5, 6, 7);
א׆ךٛنؒٝ٤ت my @array = ('a', 'b', 'c'); my $ref =
\@array; # @array ͷϦϑΝϨϯε my $ref = ['a', 'b', 'c']; # ্هͷུهɻͪͳΈʹ \('a', 'b', 'c') ผ # 2ͭͷྻͷϦϑΝϨϯεΛͬͨʢ͞2ͷʣྻ my @matrix = ( [0, 1, 2, 3], [4, 5, 6, 7], );
鿥⮛ٛنؒٝ٤تסؓؠجت my @array2 = @$ref; # ಄ʹ @ Λ͚ͭͯྻʹ͢ʢσϦϑΝϨϯεʣ print
$ref!"[1]; # !" ΛͬͯΞΫηε
ـشبٖٛنؒٝ٤ت my %hash = ( perl !" 'larry', ruby !"
'matz', ); my $ref = \%hash; # ུه my $ref = { perl !" 'larry', ruby !" 'matz', };
ـشبٖٛنؒٝ٤تסؓؠجت my $ref = { perl !" 'larry', ruby !"
'matz', }; # % Λ಄ʹ͚ͭͯσϦϑΝϨϯε # keysΈࠐΈؔɻϋογϡͷΩʔͷҰཡΛऔಘ͢Δ my @keys = keys %$ref; print $ref!#{perl}; # !# ͰΞΫηε
ظٛنؒٝ٤تַַ ˝ םמ־ס䌋ظٛنؒٝ٤تכ׀ע!\^כ־\^ך ㍱׳ my $a_of_a = [ [1, 2,
3], [4, 5, 6], ]; my @array = @{ $a!"[1] };
˝ 1PTUYEFSFGFSFODF my @array = $a!"[1]!"@*;
塜釨辐杯 ˝ 1FSMס䍚ײסץכחն״ה䍚ⱱ ˝ ך塜釨辐杯ٛطٜٚ榟䡗յ_ך乃㰄⮛מُشز my ($id) = ("͜Μʹͪɺid:motemen Ͱ͢"
=~ /id:(.+)/); # จࣈྻϚονͰҰ෦Λൈ͖ग़͢ my @lines = split /\n/, $text; # ೖྗΛߦʹׂ ˝ QFSMEPDQFSMSF
אס־ ˝ if乃כ־ע䘶⥼鵟ססֿדַגֵַ ˝ else ifעםׂיelsif ˝ ٜ٭وס⯆䐒啶乃 ˝ continueעnext
breakעlast ˝ 乃㰄⮛ס奂鬳ע!"םלךעםׂeq ˝ QFSMEPDQFSMPQ
אס־ ˝ 乃㰄⮛ס磵⺬ע غشع璡 $hoge = 'abc' . 'def' #
abcdef ˝ qw(foo bar baz)ע('foo', 'bar', 'baz')ס矴辉啶乃 ˝ perldoc -f qw
ؤ٤ط؞تع ˝ 1FSMסꦘַכ׆סץכח ˝ 䌋鍐❫꤀מ縒䜡䑒釐ֵֿ ˝ تٚؤ٤ط؞تعכٛتعؤ٤ط؞تعֵֿ my @array =
(10, 20, 30); my @x = @array; # ͜ͷ @array ϦετίϯςΩετͰධՁ͞ΕΔ my $y = @array; # ͜ͷ @array εΧϥίϯςΩετͰධՁ͞ΕΔ my ($z) = @array; # ͜ͷ @array ϦετίϯςΩετͰධՁ͞ΕΔ
ؤ٤ط؞تع ˝ @xֿ(10, 20, 30)מםסעױֵ舅抅 ˝ ךע$yע ˝ $y !"
3 ˝ 鿥⮛تٚؤ٤ط؞تعך鍐❫כאסꝎ鲭 ˝ $zמע鿥⮛ס⩝釐碛ֿ♏⪌$z !" 10鿥⮛ס墦 ע䩰י
ؤ٤ط؞تعסֵׂ粸 ם؆־ٗ٭ا־鴜ג⪌ⱱׄכյٛتعؤ٤ط؞تع ךע鿥⮛鲭꞊丗param()ֵֿזגכי my $in = { name !" param('key')
# ͜ͷؔݺͼग़͠ϦετίϯςΩετͰධՁ͞ΕΔ };
ؤ٤ط؞تعסֵׂ粸 my $in = { name !" ('foo', 'bar', 'baz')
}; my $in = { name !" 'foo', bar !" 'baz', }; כַֹ䚉מםյם־CBSכַֹ┘䓙閱ם؞٭ֿ榟ֻյ┘⺎鉮 םفءס⸉㍔כםֹ
ؤ٤ط؞تعؠؕث sort <͜͜>; length <͜͜>; if (<͜͜>) { } for
my $i (<͜͜>) { } $obj!"method(<͜͜>); my $x = <͜͜>; my ($x) = <͜͜>; my @y = <͜͜>; my %hash = ( key0 !# 'hoge', key1 !# <͜͜>, ); scalar(<͜͜>); <͜͜>;
ؤ٤ط؞تعؠؕث鉮璻 sort <Ϧετ>; length <Ϧετ>; if (<εΧϥ>) { } for
my $i (<Ϧετ>) { } $obj!"method(<Ϧετ>); my $x = <εΧϥ> my ($x) = <Ϧετ>; my @y = <Ϧετ>; my %hash = ( key0 !# 'hoge', key1 !# <εΧϥ>, ); scalar(<Ϧετ>); <εΧϥ>;
꞊丗ئهٜ٭ز٤ sub foo { my ($a, $b, $c) = !";
} סֹמ㲚銧י foo(1, 2, 3); ך⽛צ⭳ն䌕丗םס꞊丗⽛צ⭳עشؤ泸樋ך׀
䌕丗סׄ亠 sub add { my ($x, $y) = !"; return
$x + $y; } my $three = add(1, 2); ˝ add(1,2)כ⽛צ⭳גכ׀ס䌕丗ע!"כַֹ攐墤ם鿥⮛מ 劲硯 ˝ ׆ֿ($x, $y)מ⮆Ⱏ♏⪌
䌕丗סׄ亠 ˝ shift✳ֹ ˝ 䌕丗םסshiftע倊랺氳מ!"䌕丗מ ˝ my $arg1 = shift;ככ!"ס⩝釐碛ֿ$arg1מ♏⪌
˝ !"ע鿥⮛םסך ˝ my $arg1 = $_[0]ך僃⮣ס䌕丗מؓؠجت׆כך׀
䌕丗⭚杼ؕظؔ؛ّ sub func1 { my ($arg1, $arg2, %args) = !";
my $opt1 = $args{opt1}; my $opt2 = $args{opt2}; } func1('hoge', 'fuga', opt1 !# 1, opt2 !# 2); 僃䏲מ%argsכׄ׆כך泸樋⺎耆ם⺲⯥♀׀䌕丗㲔杯 ך׀
⡁ס鲭亠 ˝ returnך鲭ֿյ泸樋⺎耆 ˝ 泸樋ג㕙⺬ע僃䏲מ鍐❫ג䌋ס磵冽ֿ鲭⡁כם ˝ 䙫㍲ֿ־טׂםסך傴׀ױֹ
ٓةٖ٭ٜبتطّ ˝ قشآ٭ة package Example!"Greeter; כ傴ׂכյ♓סخ٭تؤ٭غעExample!"Greeterכַֹ⺲⯥ 狜ꝴמ㷯 قشآ٭ةכע꞊丗ס⺲⯥ֿ䢥㷯⩝յכ縒ֻכ荁ַ
ٓةٖ٭ٜبتطّ ˝ قشآ٭ة package A; sub foo { !!" }
package B; sub bar { !!" } אבA!"foo()B!"bar()ך꞊丗⹆拨ך׀
ٓةٖ٭ٜبتطّ哭釐 ˝ use Foo!"Bar!"Baz ˝ lib/Foo/Bar/Baz.pmֿ鐆ײ鱮ױյFoo!"Bar!"Baz⺲ ⯥狜ꝴֿ⛼ ˝ 1FSMס㲔车نٜؒؕע.plٓةٖ٭ٜע.pm䦡䍖㯸 ˝
㲔ⳉך傴ׂסעכ؆ל.pm
ٓةٖ٭ٜبتطّ哭釐 ˝ VTFגכ׀סنٜؒؕס䫒碟⩝ע@INCכַֹءٞ٭فٜם攐 墤㚺丗מ劲硯יַ ˝ 䜉綗氳מյوٞةؘؠع泡┖ס./lib@INCמ⪌ֹ啶 䡗יַ ˝ @INC泡䫘䳩⛼גյperl -Ilibך颯Ⳃ
˝ perldoc -f useperldoc -v @INC
⪯㑔氳םٓةٖ٭ٜ package Foo!"Bar!"Baz; use strict; use warnings; # ͜ͷύοέʔδͷ֎͔Β Foo!"Bar!"Baz!"public_function
ͰΞΫηεͰ͖Δͧ sub public_function { !!# } # ඇެ։ͳؾͷϝιου _ Ͱ͡ΊΔͧɻؾ͚ͩͳͷͰ֎͔ΒΞΫηεͰ͖ͪΌ͏͕ɻ sub _private_function { !!# } # Ϟδϡʔϧͷ࠷ޙʹ͔ͳΒͣਅΛه͢ɻͦ͏͠ͳ͍ͱ use ͕ࣦഊ͢Δͧɻ 1;
鉮鐄 ˝ VTF.0%6-&GPP CBSךٓةٖ٭ٜמ榟ֻיַ꞊丗ؕ ٤َ٭عך׀ ˝ 儖䎎עֹ㵼娆榫氳ך邾ꥭדֿյ׆ס杼鉮ך㍭םַ ˝ VTFס䌕丗םךⳏ䣆מؕ٤َ٭عיׂٓةٖ٭ٜ ֵ
˝ %BUB%VNQFS+40/םל
؛هةؘؠع䧗⺸ ˝ 1FSMעככ؛هةؘؠع䧗⺸銧鏤כי㡎ױזגׄךע םַסך䏲♀ׄ ˝ ֿյ俊鵟מ✳ֻ ˝ قشآ٭ةכٛنؒٝ٤تֿ־זיַףյׯف٭ך׀
׆׆ך؛هةؘؠع䧗⺸מחַי縒 ֹֻ
؛هةؘؠع䧗⺸כע ˝ ׇׂ癨ⶡמ銧ֻףظ٭ذ啶鵰כ䣆禈׀┉稇מגס ˝ ؛هةؘؠعעؠٚت־榟䡗 ˝ ؛هةؘؠعעظ٭ذ䧏ח ˝ ؠٚتמעظ٭ذמ㵚䣆禈׀ْخشغֿ㲊紶י ַ
1FSMמֽׄ001 001מֽׄ榫鏤 1FSMךס榫鏤 ؠٚت قشآ٭ة ْخشغ قشآ٭ةמ㲊紶ג꞊丗 ؛هةؘؠع قشآ٭ةמCMFTT גٛن
ؒٝ٤ت
CMFTT ˝ CMFTTֿ؛هةؘؠع䧗⺸1FSMמֽׄ僃䏲ס氧㕙☔擻 # ͳΜ͔σʔλ͕͋Δʢී௨ϋογϡϦϑΝϨϯεʣ my $data = { name
!" 'motemen' }; # σʔλʹύοέʔδΛඥ͚Δͱ my $self = bless $data, 'Hatena!#Engineer'; # ϝιου͕ݺΔʂ ͜͜Ͱ Hatena!#Engineer!#tweet $self!$tweet();
͍͍͔ɺΈΜͳ ɹɹɹɹɹɹɹɹ ƅшƅ ) ɹɹɹɹɹɹɹɹ(|ɹy |) ϋογϡϦϑΝϨϯεͱ package Ͱखଓ͖ܕϓϩάϥϛϯά͔͠Ͱ͖ͳ͍͕ ɹɹɹɹɹ
{}ɹ (ƅшƅ)ɹpackage ɹɹɹɹɹɹɹʘʗ|ɹy |ʘʗ ɹɹɹɹೋͭ߹Θ͞ΕOOPͱͳΔ ɹɹɹɹɹɹɹɹ(ƅшƅ)ɹ bless ɹɹɹɹɹɹɹɹ(ʘʗʘʗ
ؤ٤تعٚؠذ ˝ ؤ٤تعٚؠذ舅⮆ך傴ׂն俊鵟עOFXכַֹ⺲⯥✳ֹ ˝ ֿյאַֹֹ⯆硜ֵֿׄךעםַն鷿ֹ⺲⯥סؤ٤تع ٚؠذ⛼׆כך׀
ؤ٤تعٚؠذ package Person; use strict; use warnings; sub new {
my ($class, %args) = !"; return bless \%args, $class; }
✳ַ亠 my $person = Person!"new(age !# 18); # { age
!# 18 } ͕ Person ʹ bless ͞Εͨͷ
✳ַ亠 ˝ 1FSTPOOFX BHF ע1FSTPOOFX 1FSTPO BHF ס矴辉啶乃 ˝
׆ֹזיؠٚتْخشغ㲊紶 ˝ CMFTTיַיـشبٖٛنؒٝ٤تךֵ׆כמ㚺ע םַ ˝ QFSTPO\BHF^ך╈骰מؓؠجت׆כ⺎耆
ْخشغ package Person; use strict; use warnings; sub new {
my ($class, %args) = !"; return bless \%args, $class; } sub age { my ($self) = !"; return $self!#{age}; } sub incr_age { my ($self) = !"; $self!#{age}!$; }
ْخشغ $person!"incr_age; ˝ QFSTPOJODSBHF@עQFSTPOסCMFTT⩝ךֵ1FSTPOג לזיյ磵㷀1FSTPOJODS@BHF QFSTPO כ⺱喋 ˝ ׆ֹזיؕ٤تذ٤تْخشغֿ㲊紶ך׀
ْخشغ⽛צ⭳ױכ״ # ͜ͷೋ͕ͭՁ Class!"method($arg1, $arg2); Class!#method('Class', $arg1, $arg2); # ͜ͷೋ͕ͭՁ
$object!"method($arg1, $arg2); Class!#method($object, $arg1, $arg2);
禆䤔 package Animal; use strict; use warnings; sub new {
!!" } sub walk { !!" } 1; package Dog; use strict; use warnings; use parent 'Animal'; 1;
禆䤔 my $dog = Dog!"new(); $dog!"walk(); # Animal!#walk ͕ݺΕΔ ˝
☼磝ײכיע⺎耆דׄלֵױ僃鲣ע✳יַםַ ˝ 1FSM舅⛮ֿ*%&סئَ٭عׄטַ扛ַׄךעםַ ˝ 邾ꥭמם
؛هةؘؠع䧗⺸ױכ״ ˝ 䣆⛼䚉ֵר؛هةؘؠع䧗⺸ ˝ قشآ٭ةמ䣆禈׀㲊紶 ˝ CMFTTךظ٭ذכ磵צחׄ ˝ ؤ٤تعٚؠذע舅⮆ךחׂյ؛هةؘؠع舅⮆ך⛼ ˝
؛هةؘؠع䧗⺸겧מ⽛צ⭳ֹם矴辉
➘⮵ם$1"/ٓةٖ٭ٜ package Foo; use strict; use warnings; use Class!"Accessor!"Lite (
new !# 1, ro !# ['bar'], ); 1; my $foo = Foo!"new(bar !# 1); # new Ͱ͖ͯΔ $fop!"bar; # bar ϝιουੜ͑ͯΔ
طتع طتع傴ׂؙؤبتطّ׀ה؆כ丝זיַ ˝ QSPWFכַֹطتع㲔车榫סؤُ٤غֿ⺱卲יַ ˝ طتعעUظؔٝؠعٛ♓┖מ糋ׂ ˝ 䦡䍖㯸עU╈骰ע1FSM
طتع use strict; use warnings; use Test!"More; use Person; my
$person = Person!#new(age !$ 18); is $person!#age, 18, '࠷ॳ18ࡀ'; $person!#incr_age; is $person!#age, 19, 'incr_age ݺΜͩΒ19ࡀ'; done_testing;
طتع % prove -Ilib -v t/Person.t t/Person.t !" ok 1
- ࠷ॳ18ࡀ ok 2 - incr_age ݺΜͩΒ19ࡀ 1!"2 ok All tests successful. Files=1, Tests=2, 0 wallclock secs ( 0.01 usr 0.01 sys + 0.04 cusr 0.00 csys = 0.06 CPU) Result: PASS
5FTU$MBTT package t!"Person; use strict; use warnings; use parent 'Test!"Class';
sub setup : Test(setup) { # ͳʹ͔ෆࢥٞͳຐ๏Ͱ໊ؔͷ͋ͱʹΞϊʔςʔγϣϯͰ͖Δ # ֤ςετલͷηοτΞοϓʢมΛΫϦΞͨ͠Γͱ͔ʣ } sub incr_age : Tests { is !!#; }
כַֹ׆כך ˝ 껮ׄ餉דׄל1FSMס㓹灄־؛هةؘؠع䧗⺸وٞءِٚ٤ء ס鎇ױךױג ˝ 1FSMמֽׄ8FCؓوٛס鎇ך׀כ荁־זגׄל侇ꝴ氳 מ☪㍑ע׆׆ױך ˝ 全鶚־ַַز٭ّמ⪌זיַׂ׆כמםױն⼽ס עים炘ל؆ל؆갔זיׂדַ
˝ ײ؆ם⨣ׂ䷷ֻיׂכ䓙ַױ