Suche senden
Hochladen
Perl::Lint - Yet Another Perl Source Code Linter
•
2 gefällt mir
•
3,294 views
M
moznion
Folgen
YAPC::Asia 2014 Talking about Perl::Lint
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 154
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Static analysis for perl
Static analysis for perl
moznion
Raspberry using Python Session 1
Raspberry using Python Session 1
Mohamed Abd Ela'al
Raspberry using Python Session 3
Raspberry using Python Session 3
Mohamed Abd Ela'al
Perl 7, the story of
Perl 7, the story of
Andrew Shitov
Perl 5.16 and beyond
Perl 5.16 and beyond
Jesse Vincent
Lexing and parsing
Lexing and parsing
Elizabeth Smith
Ruby on rails, 4 code smells : un guide de simplification
Ruby on rails, 4 code smells : un guide de simplification
Hadrien Blanc
What is new in C# 6?
What is new in C# 6?
Robert MacLean
Empfohlen
Static analysis for perl
Static analysis for perl
moznion
Raspberry using Python Session 1
Raspberry using Python Session 1
Mohamed Abd Ela'al
Raspberry using Python Session 3
Raspberry using Python Session 3
Mohamed Abd Ela'al
Perl 7, the story of
Perl 7, the story of
Andrew Shitov
Perl 5.16 and beyond
Perl 5.16 and beyond
Jesse Vincent
Lexing and parsing
Lexing and parsing
Elizabeth Smith
Ruby on rails, 4 code smells : un guide de simplification
Ruby on rails, 4 code smells : un guide de simplification
Hadrien Blanc
What is new in C# 6?
What is new in C# 6?
Robert MacLean
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
mametter
떠먹는 '오브젝트' Ch05 책임 할당하기
떠먹는 '오브젝트' Ch05 책임 할당하기
Covenant Ko
Perl 5.16 and Beyond - YAPC::Asia 2011
Perl 5.16 and Beyond - YAPC::Asia 2011
Jesse Vincent
Introduction about Python by JanBask Training
Introduction about Python by JanBask Training
JanBask Training
F# for Scala developers
F# for Scala developers
Alfonso Garcia-Caro
Python for All
Python for All
Pragya Goyal
From Python to Kotlin - TalkingKT 2019
From Python to Kotlin - TalkingKT 2019
Horgix
An Introduction to ANTLR
An Introduction to ANTLR
Morteza Zakeri
Python Internals Optimization Choices Made - Codementors Office Hours with St...
Python Internals Optimization Choices Made - Codementors Office Hours with St...
Arc & Codementor
Implementation of TypeGraphQL with Apollo Server
Implementation of TypeGraphQL with Apollo Server
Fabien Pasquet
Why Python?
Why Python?
Adam Pah
Python for Swift
Python for Swift
LINE Corporation
Modern Programming Languages - An overview
Modern Programming Languages - An overview
Ayman Mahfouz
Ruby monsters
Ruby monsters
1337807
Generators, Coroutines and Other Brain Unrolling Sweetness. Adi Shavit ➠ Cor...
Generators, Coroutines and Other Brain Unrolling Sweetness. Adi Shavit ➠ Cor...
corehard_by
Python Tutorial for Beginner
Python Tutorial for Beginner
rajkamaltibacademy
An Introduction to Python Programming
An Introduction to Python Programming
Morteza Zakeri
Parrot -- "one bytecode to rule them all"
Parrot -- "one bytecode to rule them all"
Nuno Carvalho
Antlr part2 getting_started_in_java
Antlr part2 getting_started_in_java
Morteza Zakeri
Native hook mechanism in Android Bionic linker
Native hook mechanism in Android Bionic linker
Kevin Mai-Hsuan Chia
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
goccy
Practical NLP with Lisp
Practical NLP with Lisp
Vsevolod Dyomkin
Weitere ähnliche Inhalte
Was ist angesagt?
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
mametter
떠먹는 '오브젝트' Ch05 책임 할당하기
떠먹는 '오브젝트' Ch05 책임 할당하기
Covenant Ko
Perl 5.16 and Beyond - YAPC::Asia 2011
Perl 5.16 and Beyond - YAPC::Asia 2011
Jesse Vincent
Introduction about Python by JanBask Training
Introduction about Python by JanBask Training
JanBask Training
F# for Scala developers
F# for Scala developers
Alfonso Garcia-Caro
Python for All
Python for All
Pragya Goyal
From Python to Kotlin - TalkingKT 2019
From Python to Kotlin - TalkingKT 2019
Horgix
An Introduction to ANTLR
An Introduction to ANTLR
Morteza Zakeri
Python Internals Optimization Choices Made - Codementors Office Hours with St...
Python Internals Optimization Choices Made - Codementors Office Hours with St...
Arc & Codementor
Implementation of TypeGraphQL with Apollo Server
Implementation of TypeGraphQL with Apollo Server
Fabien Pasquet
Why Python?
Why Python?
Adam Pah
Python for Swift
Python for Swift
LINE Corporation
Modern Programming Languages - An overview
Modern Programming Languages - An overview
Ayman Mahfouz
Ruby monsters
Ruby monsters
1337807
Generators, Coroutines and Other Brain Unrolling Sweetness. Adi Shavit ➠ Cor...
Generators, Coroutines and Other Brain Unrolling Sweetness. Adi Shavit ➠ Cor...
corehard_by
Python Tutorial for Beginner
Python Tutorial for Beginner
rajkamaltibacademy
An Introduction to Python Programming
An Introduction to Python Programming
Morteza Zakeri
Parrot -- "one bytecode to rule them all"
Parrot -- "one bytecode to rule them all"
Nuno Carvalho
Antlr part2 getting_started_in_java
Antlr part2 getting_started_in_java
Morteza Zakeri
Native hook mechanism in Android Bionic linker
Native hook mechanism in Android Bionic linker
Kevin Mai-Hsuan Chia
Was ist angesagt?
(20)
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
떠먹는 '오브젝트' Ch05 책임 할당하기
떠먹는 '오브젝트' Ch05 책임 할당하기
Perl 5.16 and Beyond - YAPC::Asia 2011
Perl 5.16 and Beyond - YAPC::Asia 2011
Introduction about Python by JanBask Training
Introduction about Python by JanBask Training
F# for Scala developers
F# for Scala developers
Python for All
Python for All
From Python to Kotlin - TalkingKT 2019
From Python to Kotlin - TalkingKT 2019
An Introduction to ANTLR
An Introduction to ANTLR
Python Internals Optimization Choices Made - Codementors Office Hours with St...
Python Internals Optimization Choices Made - Codementors Office Hours with St...
Implementation of TypeGraphQL with Apollo Server
Implementation of TypeGraphQL with Apollo Server
Why Python?
Why Python?
Python for Swift
Python for Swift
Modern Programming Languages - An overview
Modern Programming Languages - An overview
Ruby monsters
Ruby monsters
Generators, Coroutines and Other Brain Unrolling Sweetness. Adi Shavit ➠ Cor...
Generators, Coroutines and Other Brain Unrolling Sweetness. Adi Shavit ➠ Cor...
Python Tutorial for Beginner
Python Tutorial for Beginner
An Introduction to Python Programming
An Introduction to Python Programming
Parrot -- "one bytecode to rule them all"
Parrot -- "one bytecode to rule them all"
Antlr part2 getting_started_in_java
Antlr part2 getting_started_in_java
Native hook mechanism in Android Bionic linker
Native hook mechanism in Android Bionic linker
Ähnlich wie Perl::Lint - Yet Another Perl Source Code Linter
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
goccy
Practical NLP with Lisp
Practical NLP with Lisp
Vsevolod Dyomkin
Perl5 meta programming
Perl5 meta programming
karupanerura
Scratching the itch, making Scratch for the Raspberry Pie
Scratching the itch, making Scratch for the Raspberry Pie
ESUG
Open Source Monitoring in 2019
Open Source Monitoring in 2019
Kris Buytaert
Packaging perl (LPW2010)
Packaging perl (LPW2010)
p3castro
Py4 inf 01-intro
Py4 inf 01-intro
Ishaq Ali
Steelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with Python
infodox
Listen and look at your PHP code
Listen and look at your PHP code
Gabriele Santini
Pinto+Stratopan+Love
Pinto+Stratopan+Love
Jeffrey Ryan Thalhammer
Python made easy
Python made easy
Abhishek kumar
The why and how of moving to php 8
The why and how of moving to php 8
Wim Godden
Metaprogramming Go
Metaprogramming Go
Weng Wei
Getting started with Linux and Python by Caffe
Getting started with Linux and Python by Caffe
Lihang Li
What is Python? (Silicon Valley CodeCamp 2014)
What is Python? (Silicon Valley CodeCamp 2014)
wesley chun
Numba
Numba
Travis Oliphant
Python overview
Python overview
Haroon Karim
Python typing module
Python typing module
Ryan Blunden
What's new In Perl?
What's new In Perl?
acme
Pythonlearn-01-Intro.pptx
Pythonlearn-01-Intro.pptx
MrHackerxD
Ähnlich wie Perl::Lint - Yet Another Perl Source Code Linter
(20)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
Practical NLP with Lisp
Practical NLP with Lisp
Perl5 meta programming
Perl5 meta programming
Scratching the itch, making Scratch for the Raspberry Pie
Scratching the itch, making Scratch for the Raspberry Pie
Open Source Monitoring in 2019
Open Source Monitoring in 2019
Packaging perl (LPW2010)
Packaging perl (LPW2010)
Py4 inf 01-intro
Py4 inf 01-intro
Steelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with Python
Listen and look at your PHP code
Listen and look at your PHP code
Pinto+Stratopan+Love
Pinto+Stratopan+Love
Python made easy
Python made easy
The why and how of moving to php 8
The why and how of moving to php 8
Metaprogramming Go
Metaprogramming Go
Getting started with Linux and Python by Caffe
Getting started with Linux and Python by Caffe
What is Python? (Silicon Valley CodeCamp 2014)
What is Python? (Silicon Valley CodeCamp 2014)
Numba
Numba
Python overview
Python overview
Python typing module
Python typing module
What's new In Perl?
What's new In Perl?
Pythonlearn-01-Intro.pptx
Pythonlearn-01-Intro.pptx
Mehr von moznion
Yet Another Perl Cooking
Yet Another Perl Cooking
moznion
Jesque robust-worker-pool
Jesque robust-worker-pool
moznion
Hachioji persec
Hachioji persec
moznion
Inner world of Perl::Lint
Inner world of Perl::Lint
moznion
命名の話
命名の話
moznion
Hachiojipm 44
Hachiojipm 44
moznion
Perl::Lint is over, for the present
Perl::Lint is over, for the present
moznion
Hachioji pm 41
Hachioji pm 41
moznion
Hachioji.pm 40
Hachioji.pm 40
moznion
Hachioji.pm #39
Hachioji.pm #39
moznion
Talking About Japanese Area Code of Phone
Talking About Japanese Area Code of Phone
moznion
Hachioji.pm 38
Hachioji.pm 38
moznion
Hokkaido.pm #11
Hokkaido.pm #11
moznion
Hachiojipm 36
Hachiojipm 36
moznion
Plack::Request with Encoding
Plack::Request with Encoding
moznion
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
moznion
Net stalking with-lastfm
Net stalking with-lastfm
moznion
Takao.mt 2013
Takao.mt 2013
moznion
Perl beginners #08
Perl beginners #08
moznion
Hachiojipm 28
Hachiojipm 28
moznion
Mehr von moznion
(20)
Yet Another Perl Cooking
Yet Another Perl Cooking
Jesque robust-worker-pool
Jesque robust-worker-pool
Hachioji persec
Hachioji persec
Inner world of Perl::Lint
Inner world of Perl::Lint
命名の話
命名の話
Hachiojipm 44
Hachiojipm 44
Perl::Lint is over, for the present
Perl::Lint is over, for the present
Hachioji pm 41
Hachioji pm 41
Hachioji.pm 40
Hachioji.pm 40
Hachioji.pm #39
Hachioji.pm #39
Talking About Japanese Area Code of Phone
Talking About Japanese Area Code of Phone
Hachioji.pm 38
Hachioji.pm 38
Hokkaido.pm #11
Hokkaido.pm #11
Hachiojipm 36
Hachiojipm 36
Plack::Request with Encoding
Plack::Request with Encoding
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
Net stalking with-lastfm
Net stalking with-lastfm
Takao.mt 2013
Takao.mt 2013
Perl beginners #08
Perl beginners #08
Hachiojipm 28
Hachiojipm 28
Kürzlich hochgeladen
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
Dropbox
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
Igalia
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Drew Madelung
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
Overkill Security
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
sammart93
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
apidays
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
Product Anonymous
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
MadyBayot
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Martijn de Jong
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
Khushali Kathiriya
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
Andrey Devyatkin
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
debabhi2
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
Remote DBA Services
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
apidays
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
Rustici Software
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Miguel Araújo
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Khem
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
lior mazor
Kürzlich hochgeladen
(20)
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
Perl::Lint - Yet Another Perl Source Code Linter
1.
Perl::Lint - Yet
Another Perl Source Code Linter http://bit.ly/1p5HdSA @moznion
2.
VOTE ME!
3.
SEE ALSO Perlの静的解析入門と
Perlリファクタリングツール App::PRTのご紹介 @hitode909 ! Day 2, 多目的教室3, 16:00
4.
@moznion
5.
@moznion @hitode909
6.
Perl::Lint ! https://github.com/moznion/Perl-Lint
https://metacpan.org/release/MOZNION/Perl- Lint-0.01_01 (<= UNDERDEVELOPMENT!!!)
7.
Perl::Lint ! https://github.com/moznion/Perl-Lint
https://metacpan.org/release/MOZNION/Perl- Lint-0.01_02 (<= UNDERDEVELOPMENT!!!)
8.
What is Perl::Lint?
9.
A. Source Code
Linter for Perl
10.
Yes, It’s like…
Perl:: http://bit.ly/1l5HrYX
11.
Are you using
Perl::Critic? http://bit.ly/1pfMxCW
12.
What is Perl::Critic?
13.
A. Source Code
Linter for Perl
14.
Wait!!
15.
What is Source
Code Linter???
16.
A. Analyzes the
source code and detects the causes of bugs
17.
Search and Destroy
http://bit.ly/1AT3Bl3
18.
Concretely…
19.
There are five
bad things
20.
There are five
bad things
21.
There are five
bad things
22.
There are five
bad things
23.
There are five
bad things
24.
There are five
bad things
25.
It was fun?
26.
Is this what
I think it is?
27.
It’s just CODE
REVIEW?
28.
But do you
think human should do the such code review?
29.
Human should work
more creative
30.
It seems possible
to check by computer
31.
There are five
bad things
32.
And probably human
overlooks
33.
Hard to Understand
Code
34.
Hard to Understand
Code Destroy!
35.
Hard to Understand
Code Easy to review
36.
Do you like
clean code, and why?
37.
Readable code !
! Reviewable code
38.
Readable code ≒
! ! Reviewable code
39.
=> Maintainable!!
40.
Maintainable code will
be growing up along maintainable
41.
Humans can focus
on creative work
42.
Okay, Make maintainable
code by computer!
43.
And then source
code linter was appeared (1979 for C)
44.
Now; js-lint, find-bugs,
rubocop, etc…
45.
And language processors:
Go, Scala and etc.
46.
Does Perl have?
47.
48.
Perl::Critic is awesome!
49.
Perl::Critic checks the
code conform to PBP style or not
50.
Benefit to analyze
code by computer
51.
He don’t grumble
52.
He is inexhaustible
53.
He don’t take
a mistake
54.
He is fast
(in many cases)
55.
And can automation
56.
Cost of human:
HIGH ! Cost of computer: LOW
57.
Cost of human:
HIGH ! Cost of computer: LOW Good!!
58.
Got it.
59.
But… If there
is Perl::Critic, Is Perl::Lint don’t need?
60.
Perl::Critic is awesome
but a little slow
61.
In large project,
It takes 3 minutes to run only Perl::Critic
62.
How do you
spend in meantime?
63.
Coffee? How do
you spend in meantime?
64.
Coffee? Chat? How
do you spend in meantime?
65.
Coffee? Nap? Chat?
How do you spend in meantime?
66.
Coffee? Swing Copters?
Nap? Chat? How do you spend in meantime?
67.
Life is too
short, so let’s accelerate!!
68.
Rate [num/sec] 100
75 50 25 0 97 18 Perl::Critic Perl::Lint
69.
Rate [num/sec] 100
75 About 50 400% increase 25 0 97 18 Perl::Critic Perl::Lint
70.
Yeah!!!! I'll show
you all my tricks
71.
A little break
72.
Background that led
to the development
73.
This project receive
TPF grant
74.
Do you know
TPF grant?
75.
Nozaki-san and Maki-san
(@lestrrat-san) are people in a high position of TPF grant
76.
Maki-san「日本人がトップになっ たのに日本から1つもProposal出な いのちょっとアレじゃない?」▼
me「そうですなあ」▼ Maki-san「moznion出してよ」▼ me「!!!!!」▼
77.
Time flies everything
goes…
78.
79.
Perl::Lint!!!!
80.
Let’s apply!!!
81.
Return to our
subject…
82.
How do we
do static analyzing for Perl?
83.
84.
Enough!
85.
Joke :p
86.
Two major methods
- Evaluate Token - Evaluate AST
87.
Two major methods
- Evaluate Token - Evaluate AST
88.
Tools - PPI
- Compiler::Lexer
89.
Tools - PPI
- Compiler::Lexer
90.
What is Compiler::Lexer?
91.
*Very Fast* tokenizer
made of C++
92.
Compiler::Lexer is fast
⇛ Perl::Lint is fast!
93.
And others: Compiler::Parser,
C::CodeGenerator::LLVM, etc… @goccy54++
94.
Example of tokens
that is generated by Compiler::Lexer
95.
my $foo;
96.
my $foo;
97.
Points
98.
Use these tokens
to analyze
99.
100.
Enough!
101.
Architecture of Perl::Lint
102.
Top Level +args
+site_policies +lint +lint_string Policies +evaluate 1 Filters +filter 1 1 .. * 1 .. *
103.
Simple and Easy!
104.
Policies
105.
Each policies are
isolated
106.
Easy to make
your own policy
107.
Samples
108.
*** CAUTION ***
A lot of bad code are here. Close your eyes.
109.
@P::L::P::Miscellanea::ProhibitTies
110.
@P::L::P::Miscellanea::ProhibitTies Check type
111.
@P::L::P::Miscellanea::ProhibitTies Check data
112.
113.
アッ
114.
Feature of Implementation
and Bad Know-hows
115.
Use C-Style for()
116.
Use C-Style for()
But PBP prohibit it!!
117.
Use List::Util::any instead
of grep
118.
Don’t use regex,
compare by eq in series
119.
Or use hash
…
120.
Function calling is
almost gone.
121.
Use simple parts
e.g. raw-bless, POPO
122.
Filtering mechanism
123.
Perl::Critic’s default rule
system is a bit difficult…
124.
Yes, I know,
perlcriticrc can adjust them. But too much hustle
125.
Perl::Lint checks the
all of policies as default
126.
And you can
filter any policies as you like
127.
Filter by `ignore`
128.
Filter by `filter`
129.
Yes, of course
you can deny the all of policies :)
130.
You can define
your own filter
131.
e.g.
132.
And Perl::Lint provides
default policies
133.
134.
135.
For Perl::Critic users
;)
136.
These are features
of Perl::Lint
137.
But installation is
such a hassle!
138.
Perl::Lint Playground http://perl-lint.moznion.net
139.
You can try!
140.
Meaning to publish
Playground
141.
It makes easy
to get feedback
142.
Motivation ➚
143.
Publish the Playground
is looking good!
144.
Future works
145.
Implement the all
of policies…
146.
## no lint
147.
Module for testing
(Like a Test::Perl::Critic)
148.
Cooperate with GitHub
(Like a Coveralls)
149.
Inject the result
into code as TODO comment (inspired by rubocop)
150.
As you see,
Perl::Lint is under development
151.
SEGV, ABRT, etc…
152.
I’m looking for
contributors!
153.
DEMO
154.
Any Questions?
Jetzt herunterladen