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
Perlのよい書き方
Search
dorapon2000
July 01, 2020
Programming
0
180
Perlのよい書き方
#perlwalateの発表で使用したスライドです。
perlstyleとPerl Best Practceの話
dorapon2000
July 01, 2020
Tweet
Share
More Decks by dorapon2000
See All by dorapon2000
Try::Tiny再入門
dorapon2000
0
350
ns-3.29でモジュール開発
dorapon2000
0
1.4k
Other Decks in Programming
See All in Programming
AtCoder Conference 2025
shindannin
0
1.1k
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
620
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
CSC307 Lecture 06
javiergs
PRO
0
690
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
Fluid Templating in TYPO3 14
s2b
0
130
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
130
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
200
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
9
36k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
67
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
170
GitHub's CSS Performance
jonrohan
1032
470k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
Building the Perfect Custom Keyboard
takai
2
690
The Cult of Friendly URLs
andyhume
79
6.8k
Producing Creativity
orderedlist
PRO
348
40k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
160
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
The Limits of Empathy - UXLibs8
cassininazir
1
220
Transcript
Perlのよい書き方 Perl若手の会 (2020/07/01) dorapon2000
% whoami 久保田享祐 / dorapon2000 - 筑波大学大学院 → モバイルファクトリー - 新卒3ヶ月目 -
Perlは入社が決まってから触り始めた - Python - 最近の趣味 - Apex - 競プロ - みんはや - プライムビデオ
とつぜんですが、 未完了、あるいは結果が許容値を下回る場合、次のクライアントへ なにかがおかしい? next CLIENT if not $finished || $result
< $MIN_ACCEPTABLE;
こう書くとどうでしょうか - not は || よりも演算子の優先度が低い - ! と not
は演算子の優先度が異なる - 思い違いから意図しない挙動に next CLIENT if not ($finished || $result < $MIN_ACCEPTABLE);
Perlベストプラクティス - ! は古くから使われるブール演算子で馴染みが深い - 書き手と読み手どちらにも思い違いが起きないように、and/not は いっさい使用しないようにする next CLIENT
if !$finished || $result < $MIN_ACCEPTABLE; Perlベストプラクティス p.76
紹介するもの - % perldoc perlstyle - https://perldoc.jp/docs/perl/5.26.1/perlstyle.pod - Perlの文化を知れる -
Perl Best Practice - https://www.amazon.co.jp/dp/4873113008/ - 業務中の悩みの答えになる
⚠注意 - あくまで指標 - チームや自分にあったものを選びましょう
perlstyle - Perlスタイルガイド • 4 カラムのインデント。 • 可能なら、開始中かっことキーワードを同一行に; そうでなければ、開始をそろえる。 •
複数行 BLOCK の開始中かっこの前にスペース。 • 1 行の BLOCK は中かっこも含め、1 行で。 • セミコロンの前に空白なし。 • "短い" 1 行 BLOCK ではセミコロンを省略。※ • ほとんどの演算子の前後にはスペース。 • "複雑な"代入(ブラケット内)の前後にはスペース。 • 異なることをするチャンクの間には空行。 • else をくっつけない。 • 関数名と開始カッコの間にはスペースなし。 • カンマの後ろにはスペース。 • 長い行は、演算子の後ろで改行する(and と or を除く)。※ • 行の最後のカッコの後ろにスペース。 • 対応する要素の開始位置をそろえる。 • 冗長な表現は、わかりにくくならない限りは省略する。
複数行 BLOCK の開始中かっこの前にスペース for my $name (@names) { ... }
for my $name (@names){ ... } PBPはK&Rスタイ ルを推奨 for ... { BSD }
else をくっつけない。 } else { ... ... } else {
... 未だに慣れない
長い行は、演算子の後ろで改行する push @steps, $steps[-1] + $radial_velocity * $elpased_time + $orbital_velocity
* ($phase + $phase_shift) - $DRAG_COEFF * $altitude push @steps, $steps[-1] + $radial_velocity * $elpased_time + $orbital_velocity * ($phase + $phase_shift) - $DRAG_COEFF * $altitude; PBP perlstyle PBP
対応する要素の開始位置をそろえる。 $name = standardize_name($name); $age = time - $birth_date; $status
= ‘active’; $name = standardize_name($name); $age = time - $birth_date; $status = ‘active’; とても見やすい
主要部を前に open(FOO,$foo) || die "Can't open $foo: $!"; die "Can't
open $foo: $!" unless open(FOO,$foo); 主要部が 前! or も可
ループのラベルは積極的に使う LINE: for (;;) { statements; last LINE if $foo;
next LINE if /^#/; statements; } - lastはアウトデント - ループのラベルは積極的に使う perlstyleとPBPの両方 で紹介されている
PBPで紹介されているもの - 長い代入式は代入演算子の前で分割する - サブルーチンを後続の開きカッコから分離しない $preficted_val = $average + predicted_change
* $fudge_factor; 2行目が前の続きとす ぐわかる my @candidates = get_candidates($marker); 制御構文は前後に空白を入れ るため、見た目で関数だとわか る
良いコードの手助けをするツール - Perl::Critic; - 構文チェック - Perl::Tidy; - 自動整形 -
-pbpオプションでPBPの形式にしてくれる 各種エディタの拡張機能と合わせることができる
まとめ - つねに一貫性を。 - 常に素敵に。
ご清聴ありがとうございました よいPerlライフを!