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
Introduction to perlbrew
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kang-min Liu
October 13, 2011
Technology
2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to perlbrew
The perlbrew introduction talk I gave in YAPC::Asia 2011.
Kang-min Liu
October 13, 2011
More Decks by Kang-min Liu
See All by Kang-min Liu
Elasticsearch Intro
gugod
6
690
Event-driven programming with Perl
gugod
7
1.8k
Other Decks in Technology
See All in Technology
1000⼈規模のClaude Enterprise運⽤を「Oktaのグループ」と「Slack」に集約する
sansantech
PRO
0
340
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
490
コーチングの奥義 何もしないテクニック
jinwatanabe
0
160
英語が話せなくてもKubeConスタッフに参加した話
yusuke427
2
1.1k
わたしが知り合いゼロの勉強会に 行けるようになるまで
r5ni4
2
760
AWSとAzureのマルチクラウド活用における強い味方___AWS_Kiroを使った二刀流スキル作成.pdf
duelist2020jp
0
100
内製AIチャットボット開発で学んだ Datadog Agent Observability活用術
mkdev10
0
140
1.5時間を無駄にして学んだwsl2におけるaptとsnapの選択と仕組み
yosaka0123
0
440
AIで変わるエンジニアの働き方(仮)
naoinaoi
0
530
:syncing_time:
sksat
2
740
あなたの知らないバージョン命名規則
sat
PRO
2
690
Data Hubグループ 紹介資料
sansan33
PRO
0
3.2k
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
520
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Exploring anti-patterns in Rails
aemeredith
3
470
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Documentation Writing (for coders)
carmenintech
77
5.5k
Raft: Consensus for Rubyists
vanstee
141
7.6k
The Curious Case for Waylosing
cassininazir
1
480
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
400
Transcript
None
Kang-min Liu @gugod
/me @gugod, ཱུ߁ຽ, Kang-min Liu Web programmer CPAN Author for
~100 distributions http://perlbrew.pl
/me @gugod, ཱུ߁ຽ, Kang-min Liu { Perl, Ruby, Javascript, HTML,
CSS, SQL, Photoshop } programmer CPAN Author for ~100 distributions http://perlbrew.pl
perlbrew
←
← /usr/bin/perl /usr/local/bin/perl /opt/local/bin/perl /home/gugod/local/bin/perl
← /usr/bin/perl5.8.8 /usr/bin/perl5.10.0 /usr/bin/perl site_lib is preserved after upgrade @INC
gets longer and longer.
The awesomeness perl is very backward compatible Ideal for production
keep upgrading perl is generally OK don’t necessarily have to upgrade cpan modules following a perl upgrade.
The huh CPAN modules are not necessarily backward compatible. XS
modules might need to be recompiled with new perl Upgrading modules might not be avoidable.
The hmm The current CPAN architecture sort of encourages upgrading
The default is to install the latest version of modules. Upgrading CPAN modules isn’t necessarily smooth.
The err Errors happens at runtime XS errors happens at
install / compile time and it is ^%@&* to solve.
Worst of all Have to upgrade perl before doing all
that. an all-in-ish move
Worst of all Dirty state 100 CPAN modules are updated
1 failed Can’t easily revert
retreat cp /usr/bin/perl${old} /usr/bin/perl old perl does not contain new
site_lib
But what if Upgrade perl for... performance bug-fixes evaluation
Practicals Module authors have to correctly specify module dependencies. Module
users have to run tests in order to reveal runtime errors. assuming there are sufficient numbers of tests
!
perlbrew A tool to install different versions of perls
admin-free perl installation management
beer-driven software development
rvm 1.8, 1.9, ree, jruby, rubinus, macruby, maglev, ironruby
perlbrew 5.8, 5.9, 5.10, 5.11, 5.12, 5.13, 5.14, 5.15
Installation # 1 curl -kL http://xrl.us/perlbrewinstall | bash # 2
cpan -i App::perlbrew perlbrew init
Usage perlbrew install perl-5.12.2 perlbrew install perl-5.13.5 perlbrew install perl-5.10.1
perlbrew install perl-5.8.8 * Internet connection is required
Usage perlbrew use perl-5.14.2 perlbrew use perl-5.15.5 perlbrew switch perl-5.14.2
perlbrew off
Usage perlbrew list
> perlbrew list perl-5.10.0 perl-5.10.1 perl-5.10.1 perl-5.12.3 perl-5.14.1 * perl-5.14.2
perl-5.14.2@app-awesome perl-5.15.3
Usage perlbrew lib
Usage perlbrew lib list perlbrew lib create nobita perlbrew lib
create perl-5.14.2@nobita perlbrew use perl-5.14.2@nobita perlbrew lib delete perl-5.12.3@nobita
cd ~/src/App-Awesome perlbrew use perl-5.10.1@app-awesome perlbrew use perl-5.14.2@app-awesome cd ~/src/Module-Awesome
perlbrew use perl-5.10.1@nobita perlbrew use perl-5.14.1@nobita perlbrew use perl-5.14.2@nobita
perlbrew use perl-5.10.1@app-awesome
perlbrew use perl-5.10.1@app-awesome perl installation name
perlbrew use perl-5.10.1@app-awesome local::lib name
perlbrew use perl-5.10.1@app-awesome
eval `perl -Mlocal::lib=~/.perlbrew/ libs/perl-5.10.1@app-awesome/`
% perl -V ... Compiled at Sep 27 2011 14:08:36
%ENV: PERL5LIB="/Users/gugod/.perlbrew/libs/perl-5.14.2@app-awesome/lib/perl5/darwin-2level:/ Users/gugod/.perlbrew/libs/perl-5.14.2@app-awesome/lib/perl5" PERLBREW_BASHRC_VERSION="0.30," PERLBREW_HOME="/Users/gugod/.perlbrew" PERLBREW_LIB="app-awesome" PERLBREW_PATH="/Users/gugod/.perlbrew/libs/perl-5.14.2@app-awesome/bin:/Users/gugod/ perl5/perlbrew/bin:/Users/gugod/perl5/perlbrew/perls/perl-5.14.2/bin" PERLBREW_PERL="perl-5.14.2" PERLBREW_ROOT="/Users/gugod/perl5/perlbrew" PERLBREW_VERSION="0.30" PERL_LOCAL_LIB_ROOT="/Users/gugod/.perlbrew/libs/perl-5.14.2@app-awesome" PERL_MB_OPT="--install_base /Users/gugod/.perlbrew/libs/perl-5.14.2@app-awesome" PERL_MM_OPT="INSTALL_BASE=/Users/gugod/.perlbrew/libs/perl-5.14.2@app-awesome" @INC: /Users/gugod/.perlbrew/libs/perl-5.14.2@app-awesome/lib/perl5/darwin-2level /Users/gugod/.perlbrew/libs/perl-5.14.2@app-awesome/lib/perl5 /Users/gugod/perl5/perlbrew/perls/perl-5.14.2/lib/site_perl/5.14.2/darwin-2level /Users/gugod/perl5/perlbrew/perls/perl-5.14.2/lib/site_perl/5.14.2 /Users/gugod/perl5/perlbrew/perls/perl-5.14.2/lib/5.14.2/darwin-2level /Users/gugod/perl5/perlbrew/perls/perl-5.14.2/lib/5.14.2
perlbrew.pl 0.30
Properties isolated perl installations bin, site_lib, local::lib install a new
version ≠ upgrade @INC does not include old site_lib
Benefits `sudo cpan` is no more easier-to-clean perl environments Nuke
the whole thing to clean the mess No old @INC
Benefits per-app isolated perl environments setup. avoid, in advance, any
possible incompatible issues with other apps. know your libs
avoid lib conflicts with what you had install older versions
of modules without worries to break other app code. cpanm http://URL.TO/Mo-0.1.tar.gz App::pmuninstall Benefits
Rationale Don’t mess up vendor perl too much. Learn new
stuffs in the dev version of perl. keep up with the fashion
Rationale Test modules or apps ... with newer perl ...
with older perl
Rationale Test perl itself -Dusethreads -Duse64bitall -Duse64bitint Configure -h -D
-U -A
Rationale spare some guts B, XS Better with a perl
built with DEBUGGING
Thoughts perlbrew « cpanm, ack, rvm
Thoughts One standalone program embed non-core modules very easy distribution
runs a tiny bit faster
Thoughts rvm bash programming master-piece developer-friendly experiences production uses
Further Thoughts Deprecate switch/use to external perl Improve multi-user scenario
More related tool to help developer identify module upgrade failure, and revert to a good state.
Further Thoughts Good + Simple toolkit Keep new-comers by not
frustrating them Grow the community
Simple is Hard
Development http://github.com/gugod/App-perlbrew 49 contributors Feedback github issue / pull requests
rt.cpan.org #perlbrew on twitter
Development http://perlbrew.pl Documentation / Updates A static version of github
Wiki
Thank You