Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
はてなリモートインターン2021 Perlブートキャンプ 講義資料
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hatena
October 08, 2021
Technology
5.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
はてなリモートインターン2021 Perlブートキャンプ 講義資料
https://hatenacorp.jp/recruit/intern/2021
Hatena
October 08, 2021
More Decks by Hatena
See All by Hatena
Androiderを育成する「高速道路」と 実戦を経て辿り着いた現在地 / DroidKaigi 2026
hatena
0
290
60分で学ぶクラウドとSRE・サービス運用 / GeekCAMPAcademia 2026-05
hatena
1
150
エンジニアリング マネージャーの育成と評価軸の考え方
hatena
0
750
Perlブートキャンプ
hatena
0
5.8k
はてなサマーインターンシップ2025 Web API 講義資料
hatena
0
1.8k
はてなサマーインターンシップ2025 フロントエンド 講義資料
hatena
21
11k
はてなサマーインターンシップ2025 コンテナ + Kubernetesハンズオン 講義資料
hatena
0
870
はてなサマーインターンシップ2025 クラウドと運用 講義資料
hatena
0
910
はてなサマーインターンシップ2025 RDBMSの基礎 講義資料
hatena
0
1k
Other Decks in Technology
See All in Technology
AI AgentによるEmbedded SREの取り組み
tgidgd
1
340
AIエージェント統制はAPIから——押さえるべき5つの要素
nagix
0
120
bpf_arenaとstruct_opsを使うのが難しかった話
masu_mi
1
170
生成AI時代のIAMのマニアックな話
takuros
6
2.1k
Building Audio Plugin Ecosystem for Android in 2026
atsushieno
2
150
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
150
SLOを阻む不安
sraku2159
0
220
続・ソフトウェアアーキテクトのための意思決定術: Decision Readiness, Revisited — When AI Changes the Economics of Software Architecture
snoozer05
PRO
9
2.3k
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
0
220
Strands Decider 2BでAWSアップデートの目利きをしてみた
sato4mi
1
120
公共分野での生成AI活用
toru_kubota
1
210
Flutter Widget Previewerで始めるUIプレビューとVRTの自動化
sakusaku3939
0
210
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
BBQ
matthewcrist
90
10k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
560
Scaling GitHub
holman
464
140k
Testing 201, or: Great Expectations
jmmastey
46
8.4k
Darren the Foodie - Storyboard
khoart
PRO
4
4.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Typedesign – Prime Four
hannesfritz
42
3.2k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
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ؓوٛס鎇ך׀כ荁־זגׄל侇ꝴ氳 מ☪㍑ע׆׆ױך ˝ 全鶚־ַַز٭ّמ⪌זיַׂ׆כמםױն⼽ס עים炘ל؆ל؆갔זיׂדַ
˝ ײ؆ם⨣ׂ䷷ֻיׂכ䓙ַױ