perl6 port of HTTP::Tinyish
HTTP::Tinyish (https://github.com/miyagawa/HTTP-Tinyish) is a perl5 http client wrappers, which is "embeddable" or "fatpackable", written by miyagawa san.
I ported it to perl6 (only curl backend). github.com
It passed a basic test, and I think it may be useful some situation.
But there is a problem! Perl6 @*INC does not allow code refs or objects, so we cannot create App::FatPacker!
Let's make CompUnitRepo more hackable!
perl6のminimal authoring toolを作った
perl6を知るにはとにかくモジュールを書いてみることで、それには簡単なやつでいいのでauthoring toolがあったほうがいいので作った。1ヶ月後には全く違ったperl6が書けるようになっていることを祈る。
使い方
new, build, test コマンドがあり minil と同じ感覚で使える(はず。)
> mi6 new Foo::Bar > find Foo-Bar -type f -not -iwholename '*.git*' Foo-Bar/.travis.yml Foo-Bar/lib/Foo/Bar.pm6 Foo-Bar/LICENSE Foo-Bar/META.info Foo-Bar/README.md Foo-Bar/t/01-basic.t > cd Foo-Bar > mi6 build # regenerate README.md > mi6 test # run tests
なお release はない。
インストール方法
> panda install git://github.com/shoichikaji/mi6.git
結論
perl6を書く準備は万全である。
perl6 replを使うときLinenoiseを入れとくべき
from http://rjbs.manxome.org/rubric/entry/2081
perl6は perl6
を実行すれば repl ができる。素晴らしい。
$ perl6 > my $foo = -> $name { say "Hey, $name!" } -> ($name) { #`(Block|140410221851264) ... } > $foo("you") Hey, you!
しかし、ctrl keyのショートカットが使えなかったり、十字キーは [[A^[[B^[[B^[[D^[[C
となったりするので、
$ panda install Linenoise
で Linenoiseを入れとくべき。
perl6で外部プログラムの出力を操作する
perl6でperl5のあれどうやるの1回目。
perlをshell++なものとして使うことはよくある。例えば、外部プログラムを実行しそのstdoutに時刻をつけていくには
use strict; use warnings; use POSIX qw(strftime); my @cmd = ('perl', '-E', '$|++; for (1..10) { say $_; sleep 1 }'); open my $fh, "-|", @cmd or die; while (<$fh>) { printf "[%s] %s", strftime("%F %T", localtime), $_; } close $fh;
みたいにすると思う。
> perl test.pl [2015-09-05 16:25:03] 1 [2015-09-05 16:25:04] 2 [2015-09-05 16:25:05] 3 ...
これをperl6でやろうとするとこんな感じか。
use v6; my @cmd = 'perl', '-E', '$|++; for (1..10) { say $_; sleep 1 }'; my $proc = Proc::Async.new(|@cmd); $proc.stdout.tap(-> $str { printf "[%s] %s", DateTime.now, $str; }); my $promise = $proc.start; await $promise;
さらにperl6では何も考えずに外部プログラムを増やせる。いい!
use v6; my @promise = do for 1..2 { my @cmd = 'perl', '-E', '$|++; for (1..10) { say $_; sleep 1 }'; my $proc = Proc::Async.new(|@cmd); $proc.stdout.tap(-> $str { printf "[%s] %s", DateTime.now, $str; }); $proc.start; } await |@promise;
(ときどき意味不明なエラー出るけど)
vimでperl6のsyntax check
YAPC::Asia Tokyo 2015
YAPC::Asia Tokyo 2015に行ってきたのでその感想を書く。
- もっともよかったトークはJonathan WorthingtonさんのParallelism, Concurrency, and Asynchrony in Perl 6。Perl5の最大の欠点はthreadが使えないことだと思っていて、Perl6でそれが解決されるのかと期待していた。実際のところ、それどころじゃなくすべてぶっこみまくっている感じで最高だった。Perl6使おう。
- hitodeさんのトークで、Perlでプログラミングとはなんたるか、まで考えて作っているサービスがあるんだな、とちょっと衝撃を受けた。そういう環境にあこがれる。
- 今回のYAPCに行った目的の99%はmiyagawaさんとcpanmについて話すことだった。最後にそれが叶い、とても嬉しかった。cpanm並列化してスピードアップはもしかしたら本体に入るかもしれない。
- 1日目にLTをさせていただいた。これを通して、cpanm, carton などは一見完成されたソフトに見えるかもしれないけど、まだまだやるべきこと、やれることはたくさんあって、とりあえず何かやろう、と伝えたかった。
YAPC非常に楽しかったです!
最速で perl を install する
Just type:
curl -sSkL https://git.io/perl-install | bash -s ~/perl