サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
ks0608.hatenablog.com
10/24発売のWEB+DB PRESS Vol.89に「Perlによる内部DSLの作り方」という記事を書いた。 gihyo.jp タイトルの通り、Plack::Builderのコードを例に挙げながら、PerlによるDSLの作り方を紹介した記事である。僕自身、Plack::BuilderがPerl5のコードの中で一番カッコイイと思っているので、そのカッコよさが伝われば望外の喜びである。 さて、この記事を読んだならばおそらく次の疑問が湧くだろう。そう、Perl6ではどうなってるのよと。 これについては、すでに Crust::Builder, Frinfon などでその片鱗をうかがえる。 結論として、Perl5もPerl6もあつい!
先日行われた Gotanda.pm #5 でも発表させていただいたが、まさしく experimental な cpan client cpm を作った。 github.com Why new? cpan module の install にはいつも cpanm を使っており そのシンプルさと安定性には感心するばかりである。 が、cpanmにも不満がないわけではない。 perlである程度のことをやろうとすればすぐにcpan moduleの依存は 100を超える。 そういった場合、cpanmは直列でcpan moduleをインストールしていくため かなりの時間がかかる。 これをなんとかしたい。 Features of cpm cpm は如何に速くcpan module をインストールするか、しか考えていない。速くするために以下のようにしている。 cpanm を並列に使って cpan modul
Re: http://techblog.karupas.org/entry/2015/06/11/163420 How about this? cf: https://github.com/shoichikaji/Perl-PrereqDist ...
今、perlがあつい!よって require について知るしかない! "普通" のrequire require(もしくはuse)関数は Module をロードしたいときに使う。 例えば、 require Foo::Bar; # もしくは use Foo::Bar とすると、perlは@INCに入っているディレクトリ以下のFoo/Bar.pmファイルを探しload(eval)しようとする。 すなわち仮に@INCが @INC = ("/path/to/dir1", "/path/to/dir2", "/path/to/dir3") ならば、perlは 候補1: /path/to/dir1/Foo/Bar.pm 候補2: /path/to/dir2/Foo/Bar.pm 候補3: /path/to/dir3/Foo/Bar.pm の順に Foo/Bar.pm を探し、見つかった時点でそれをlo
5/20 に 吉祥寺.pmミニ Carton/Carmelのコードリーディング が行われるので事前にCarmelを読んどく。 結論 読むなら Carmel::Setup/Runtime あたり! Carmel の基本的な使い方 ほとんど Carton と同じにように使える。つまり cpanfile に依存を書いて、carmel install でインストールし、carmel exec で実行。 $ echo "requires 'Plack';" > cpanfile $ carmel install ---> Installing new dependencies: Plack ... ---> Complete! 1 cpanfile dependencies. 20 modules installed. $ carmel exec perl -V ... @INC: Carmel::
File::RotateLogs が大変便利でよく使っているのだが、これはファイルへ書き込むときに print を呼んでいる。 一方 にひりずむ::しんぷる - perl で復数のプロセスからログを吐くときは syswrite または flock すべし によると長いログを吐くときは syswrite にしないと混ざるとある。 よって File::RotateLogs も実は混ざることがあるのかなと思い、複数プロセスから長いログを吐きまくってみたが一向に混ざらなかった。 いろいろ調べた結果、open layer に最も低級な layer である :unix を指定すれば print 時も 1 つの write(2) になるようだった。 > cat test.pl open my $fh, ">:unix", "test.txt"; print $fh "a" x (1024 * 100);
https://github.com/miyagawa/Carmel を使ってみる! 注:miyagawa さんに教えていただき cpanm インストール方法、例ともに修正しました https://gist.github.com/shoichikaji/5a951ab796ed0e596c47/revisions まず copy-build-artifacts ブランチの cpanm をインストール $ cpanm File::Copy::Recursive # 依存してるのではじめに入れておく $ cpanm git://github.com/miyagawa/cpanminus.git@copy-build-artifacts Carmel をインストール $ cpanm git://github.com/miyagawa/Carmel.git Plack のバージョン1.0033,
App::RemoteCommand というのを cpan にあげた。 cpan: https://metacpan.org/release/App-RemoteCommand github: https://github.com/shoichikaji/App-RemoteCommand インストール方法 > cpanm App::RemoteCommand > rcommand -v App::RemoteCommand 0.01 なにするもの? ssh で複数ホストにはいって並列にコマンドを実行するスクリプト。 なんで作ったか fabric や chef を使えば複数ホストに並列にコマンドを実行できる。 が、専用のシンタックスで書かなくちゃいけないしイマイチカジュアルじゃない。 ssh, xargs を組み合わせて > cat host-list.txt | xargs -P5 -L
carton で % tree . ├── cpanfile ├── cpanfile.snapshot ├── lib │ └── MyClass.pm ├── local │ ├── cache ... │ └── lib │ └── perl5 │ ├── Net ... │ ├── Parallel ... │ └── darwin-2level ... └── script.pl のようにして管理しているとき、 script.pl を fatpack したい! 依存関係は carton がすでに解決しているので # https://gist.github.com/shoichikaji/6699943 rm -rf pack mkdir pack cp -r local/lib/perl5 pack/fatlib cp -r lib pack/lib
tl;dr github の release ページ からすきな場所に置けば使える perl がダウンロード可能 リロケータブル perl って? 通常 perl は build 時に モジュールの読み込み path (@INC) を決定するため、インストール後 perl のディレクトリを移動するとモジュールが読み込めなくなり、使い物にならなくなる。 Can't locate strict.pm in @INC (you may need to install the strict module) (@INC contains: ...) しかしながら実際は -Duserelocatableinc オプションを指定しbuild すれば、 @INC は perl binary の相対path で管理されるようになるため、インストール後 perl の directory を移動しても問題なく動
前のエントリーで リロケータブル=どこに置いても使える Perl が欲しいと書いた。 その有用性を示すため、GrowthForecast をインストール済の relocatable でビルドした Perl を用意してみた。 https://github.com/shoichikaji/relocatable-perl-growthforecast 64 bit の linux をお使いなら、好きなディレクトリに移動して > wget https://github.com/shoichikaji/relocatable-perl-growthforecast/releases/download/0.02/perl-5.18.2-linux-x86_64-0.02.tar.gz > tar xzf perl-5.18.2-linux-x86_64-0.02.tar.gz > perl/bin/
gitlab のインストーラとして id:akagisho 作 https://github.com/akagisho/gitlab-installer があるが、これを docker のコンテナで実行すると mysql, redis の起動ができず失敗する。 そこで上記スクリプトの前にmysql, redis を起動しておくDockerfile を書いた。 https://github.com/shoichikaji/docker-gitlab gitlab を docker で動かす Dockerfile は既にたくさんあるが これは 1 つのコンテナで完結するので とりあえず gitlab を試してみたいときには便利だと思う。 使い方 > docker build -t skaji/gitlab git://github.com/shoichikaji/docker-gitlab.g
少し前に node に触ってみようと 公式サイトから バイナリをダウンロードし $HOME/node に入れたところ、すぐに使えて感動した。 perl もこのようになっていてほしい。つまり 最新バージョンの pre compile 済みのバイナリが手軽にダウンロードでき、 好きなディレクトリに展開すれば使える という環境を整えるベキだと思う。 pre compile 済みのものを用意するのは難しくないだろう。 問題は 好きなディレクトリに展開すれば使える である。 実は -Duserelocatableinc を指定してコンパイルすれば @INC はリロケータブルになるらしい。 (cf: モダンPerlの世界へようこそ, perl5100delta) 試しに -Duserelocatableinc でコンパイルして、ディレクトリを移動してみたところ確かに モジュールはディレクトリを移動して
Perl 初心者が初心者なりにリファレンスを説明してみるの2回目。前回はリファレンスを取得することと、そのリファレンスから元のものにアクセスする(デリファレンスする)方法を書いた。今回は無名配列、無名ハッシュ、無名サブルーチン、無名スカラーについて。特に無名配列、無名ハッシュについて例を挙げて説明する。 前回同様、丸括弧()、ブラケット[]、ブレース{} の違いを意識しながら読んでほしい。 目次 復習 無名配列、無名ハッシュ、無名サブルーチン、無名スカラー 例 1.復習 変数からリファレンスをとるには前にバックスラッシュ(Windows は円マーク)を付ければよかった。 my $s = "This is a pen."; my @a = ("Apple", "Orange", "Melon"); my %h = (jp => 'Japan', kr => 'South Korea'); s
Tera Term を使ってリモートで作業してるとき、Mac の pbcopy のようにクリップボードに標準入力から受け取ったデータをコピーしてくれるコマンドがあったら便利だなと思う事がしょっちゅうある。 リモートの tmux でコピーした内容のローカルのクリップボードへの反映 | doda's blog によるとクリップボード設定用制御文字列というのがすでにTera Termで使えるらしく、実際簡単にpbcopyコマンドっぽいのが作れた。 準備 Tera Termで [設定]->[その他の設定]->[制御シーケンス]->[リモートからのクリップボードアクセス]->[書き込みのみ] を設定する。 下のスクリプトをPATHの通ったところにpbcopyという名前で実行権付きで保存。おわり 使い方 パイプでpbcopyの標準入力へデータを渡せばクリップボードに入る。いくつか例を挙げれば $ da
Mac で sed を使ってタブを空白4文字に置換しようと思って cat file.txt | sed 's/\t/ /g'としたら、文字 t が空白4文字になった。sed はもう使いません。Perl でやります。 cat file.txt | perl -pe 's/\t/ /g'でおk。別に cat を使わず perl -pe 's/\t/ /g' file.txtでもいいんだけど、処理を少しずつやっている感じで cat を使った方がしっくりくる。 ついでに、文字コード utf8、 改行 LF にして、全角空白を半角空白2個に置換することも追加すると nkf -w -Lu file.txt | perl -pe 's/\t/ /g; s/ / /g'となる。完璧。 Perl の一行だけで処理を書いてしまういわゆるワンライナーについては Perl one liner 集 perl 1行野
YAPC::Asia Tokyo 2012 の2日目に行ってきたので感想を書こう。 「新しい」を生み出すためのWebアプリ開発とその周辺 yusukebeさん Perl というかプログラミングをやろうと思い始めたのはこの方のブログを読んでからだった思う。 全く本筋とは関係ないが、何かやり始めるときにsandboxというディレクトリを作る、というのを真似させてもらおう。 The Perl IDE for Normal People, Adam Kennedyさん cpan検索してるとかっこいいサムネが出てくる人。 Perl 今昔物語 miyagawaさんいわく、 Perl 5.10が出たとき、どうせPerl 5はPerl 6に吸収されるんだからと開発が一時停滞仕掛けたが、 Perl 5は5で6とは別に進化を続けることになり Perl 5が再び活発になった。 Perl 5.12 で動くコードは
vim の改行コードの表示は dos, unix, mac とかになっていてよく意味が分からない。これを のように CR+LF, LF, CR と表示するように変えてる。 それも合わせて今の僕の .vimrc はこのようになってる。 syntax on set number set hlsearch set showcmd set showmatch set shiftwidth=4 set smartcase set tabstop=4 set softtabstop=4 set expandtab set list set listchars=tab:»-,extends:»,precedes:«,nbsp:%,trail:- vnoremap y "+y set nowrap set scrolloff=999 highlight ZenkakuSpace ctermbg=white
TERM=screen-256color にしている tmux から Cent OS 5.8 にリモート接続していろいろやろうと思ったら、プロンプトのカーソルが表示してある文字に重なったり、vim のハイライトが 16 色になったりと残念なことになってしまった。 これは Cent OS 側に screen-256color の定義ファイルがないのが問題らしい。実際、/usr/share/terminfo 以下に screen-256color のファイルはない。 で、これを直そうといろいろやった結果、Cent OS 側で xterm-256color の定義を screen-256color でも使うようにすれば色の問題は解決した。 やり方 Cent OS 側で適当なところに以下の screen-256color.terminfo ファイルを作る。 screen-256color|GNU
Perl 初心者が初心者なりにリファレンスを説明してみるの最終回3回目。1回目 はリファレンスを取得することと、そのリファレンスから元のものにアクセスする(デリファレンスする)方法を書いた。2回目 は無名配列、無名ハッシュをどこかに作ってリファレンスを表す記法 [ ], { } について書いた。今回はリファレンスからデリファレンスをするときの簡潔な記法である矢印記法を説明する。 目次 復習 矢印記法の基本 インデックス、キー、引数に挟まれた矢印は省略可能 1.復習 リストをブラケット [ ]、ブレース { } でくくることによって、それぞれ無名配列、無名ハッシュを Perl がどこかに作ってくれて、そのリファレンスだけを表せた。また sub { ... }; によって無名サブルーチンのリファレンスを表せた。 # ソースコード1 my $fruit = ['apple', 'orange',
Perl 初心者が初心者なりにリファレンスを説明してみる。「初めてのPerl」を読み終わって、いざ何かやろうと思ってもリファレンスが分かってなかったら何もできなかった。 リファレンスとは、厳密には知らないけど、変数の置いてある場所のアドレスのことと理解しよう。C 言語のポインタと同じだと思ってもいんじゃないだろうか。ただしリファレンスに1を足して次の要素が得られるといったことはありません。 はじめてリファレンスを学んだとき $$ref[0] とかが出てきて区切りが分からなくて理解しにくかった。よってこの説明では冗長だけど ${ $ref }[0] のように書く。 以下の説明では括弧の種類、つまり丸括弧()、ブラケット[]、ブレース{} の違いを意識しながら読んでほしい。 目次 復習 $, @, %, & 復習 ループ リファレンス リファレンスを使って多次元配列 参考文献 深沢千尋, すぐ
勉強のため、 Google に無線 LAN アクセスポイントの MAC アドレスを 2 つを投げて、住所を得るスクリプトを Perl で書いてみた。 POST するデータをハッシュのリファレンスで送りたかったけど、それだとエラーがでたので(なぜ?)、文字列にしておいた。 元ネタは 高木浩光@自宅の日記 - Wi-FiのMACアドレスはもはや住所と考えるしかない Google Gears WiFi Geolocation API query // IndonesianCoder Advisories #!/usr/bin/env perl use strict; use warnings; use JSON; use Data::Dumper; use utf8; use Encode; use LWP::UserAgent; $Data::Dumper::Indent = 1; $Data
このページを最初にブックマークしてみませんか?
『skaji's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く