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
5k
はてなリモートインターン2021 Perlブートキャンプ 講義資料
https://hatenacorp.jp/recruit/intern/2021
Hatena
October 08, 2021
Tweet
Share
More Decks by Hatena
See All by Hatena
はてなリモートインターンシップ2023 Web, HTTP 講義資料
hatena
1
310
はてなリモートインターンシップ2023 Web API 講義資料
hatena
1
180
はてなリモートインターンシップ2023 インフラ講義資料
hatena
15
5k
はてなリモートインターンシップ2023 コンテナ講義資料
hatena
0
180
はてなリモートインターンシップ2023 ソフトウェアアーキテクチャ講義資料
hatena
0
180
はてなリモートインターンシップ2023 RDBMS ブートキャンプ講義資料
hatena
1
120
はてなリモートインターンシップ2023 フロントエンドブートキャンプ講義資料
hatena
0
210
はてなリモートインターンシップ2023 Perlブートキャンプ講義資料
hatena
0
120
はてなリモートインターンシップ2023 コンテナオーケストレーション講義資料
hatena
3
280
Other Decks in Technology
See All in Technology
サーバーとは何かを理解して、コンテナ1つで実行しよう | PHPerKaigi2024
sadnessojisan
31
11k
スプリント内で試験を完了させるには?アジャイル・スクラム開発に参加したQAエンジニアの悩みと対策
cybozuinsideout
PRO
1
110
【OpenAI本出版記念】npakaによるOpenAI最新技術情報と技術情報キャッチアップ術
npaka
8
1.4k
AIエージェントが変えるソフトウェアのパラダイム
masahiro_nishimi
0
200
Feature Flag Deep Dive
biwashi
20
5k
スクラムガイドに載っていないスクラムのはじめかた - チームでスクラムをはじめるときに知っておきたい5個のコツ - / How to start Scrum that is not written in the Scrum Guide
takaking22
14
5.2k
PHPerKaigi 2024 - PHP 本体のバグを見つけたら適切に報告しよう
zeriyoshi
0
750
あなたの知らないバグバウンティの世界
eurekaberry
1
1.4k
なんでもかんでもコンテナ化すればいいってもんでもないけど なんでもかんでもコンテナ化したらスッキリしました
saramune
1
160
【Cyber-sec+】ログの森で出会ったCloudTrail との奇妙な旅
hssh2_bin
1
220
How to Build a Strong Engineering Culture
alperhankendi
0
120
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
5
1.3k
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
4
1.4k
Gamification - CAS2011
davidbonilla
76
4.5k
What's new in Ruby 2.0
geeforr
335
31k
Typedesign – Prime Four
hannesfritz
36
2k
Six Lessons from altMBA
skipperchong
19
2.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
11
1.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
657
120k
Thoughts on Productivity
jonyablonski
57
3.7k
Designing with Data
zakiwarfel
94
4.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
397
65k
Unsuck your backbone
ammeep
660
56k
The Invisible Customer
myddelton
114
12k
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ؓوٛס鎇ך׀כ荁־זגׄל侇ꝴ氳 מ☪㍑ע׆׆ױך ˝ 全鶚־ַַز٭ّמ⪌זיַׂ׆כמםױն⼽ס עים炘ל؆ל؆갔זיׂדַ
˝ ײ؆ם⨣ׂ䷷ֻיׂכ䓙ַױ