Perl
HTTP::Request#content($bytes) もしくは HTTP::Request#add_content($bytes) を呼んでもcontent-lengthは自動で計算されず、0になる。 なのでそのままリクエストを送ると、ちゃんとcontent-lengthだけbodyを読む実装はボディが空だとみなすのでちゃんとcont…
memcached はコマンドインジェクションの機会が主に2つあって、1つはプロトコルで定められたキー長250文字を越えた場合と、キーに改行文字を含む場合。詳しくは: 第2回 memcachedのセキュリティと脆弱性:memcachedの活用と運用 実践編|gihyo.jp … 技術評論…
普段、Perlを書くときは require_ok などでモジュールがコンパイル可能か・構文エラーがないかをテストするようにしているけれど、 require_ok では発見できない構文エラーを発見したのでそれの詳細と対策について。 実行時エラーになる構文エラー (?) とind…
JSON::TypeInference 1.0 metacpan.orgだいたい欲しいものは実装したので覚悟を決めるという意味での 1.0 リリース。 これはなにか? Perl の値 (スカラ値、ハッシュリファレンス、配列リファレンスなど) が JSON のどの型であるかを推論するモジュール。 Per…
metacpan.orggithub.comNull と値型のただ2つからなる Union 型を Maybe という特別な型として推論するようにした。ちょっと便利。Maybe だったら {"type" : ["null", "string"]} のように出力するようにすると、より厳密な JSON スキーマを生成することがで…
github.comMinilla を使っている。minil new してからちょっと手を入れる。 .mailmap <aereal@aereal.org> <aereal@users.noreply.github.com>GitHub の Web インターフェースで Merge Pull Request ボタンを押すとコミットの AUTHOR_EMAIL がこれになる。たぶんメールアドレスを非公開にしているとこれになるよう</aereal@users.noreply.github.com></aereal@aereal.org>…
github.com metacpan.org これは何か Perl の値 (スカラ値、ハッシュリファレンス、配列リファレンスなど) が JSON のどの型であるかを推論するモジュール。Perl の 1 という値は JSON の number である、Perl の "a" は JSON の string である、という風な…
metacpan.orgちょうどいいデフォルト値が見当たらないので、このキーは各環境で適宜、定義せよ、という風にしたい。interface みたいなかんじ。 use strict; use warnings; use Test::More tests => 2; use Test::Fatal qw(exception); { package My::Config…
Path::Tiny - search.cpan.org Path::Tiny には new という、いかにもオブジェクト指向的なコンストラクタのような名前のメソッドが定義されているのでいかにもオブジェクト指向的に継承できるように見えるが結論から言うと できない 。 sub new { shift; pa…
テンプレートエンジンNight というイベントで Text::Xslate を使ってテンプレートの静的解析とリファクタリングを行った知見について発表した。 テンプレートエンジンを使ってこういうことができる、というような内容から、テンプレートエンジン作った・作っ…
Text::Xslate::AST::Walker - Filter Nodes in the AST made by Text::Xslate - metacpan.org ae real / Text-Xslate-AST-Walker-0.01 - search.cpan.org これはなに? Text::Xslate::Parser が返す AST を文字通り「歩きまわる」ためのモジュールです。0.01…
HTML::Selector::XPath@0.16 は CSS における class セレクタと等価な XPath を出力しない - Sexual Knowing HTML::Selector::XPath@0.16 は CSS における class セレクタと等価な XPath を出力しない - Sexual KnowingNormalize space characters of the cl…
再現コード class_with_lf.t class 属性の値における「空白文字」 class 属性の値は: The attribute, if specified, must have a value that is a set of space-separated tokens representing the various classes that the element belongs to. HTML Stand…
Perl には Test::Class という JUnit 風にテストを書けるモジュールがある。すなわち: テスト用のクラスを定義し アサーションをインスタンスメソッドとして括り出す ことができる。Test::Class はテスト実行時に環境変数 TEST_METHOD に与えられた値で実行…
Test::mysqld とは Perl に Test::mysqld というモジュールがある。テストを実行するときに MySQL のインスタンスをよしなに起動してくれる。同じテストスイート (プロジェクト、リポジトリ) を並行して実行する場合、データベースの接続先は同じなので複数…
最近は Perl で書かれたプロジェクトの依存モジュール管理は cpanfile で行われていることが多い*1ので自然と cpanfile を読み書きする機会も増える。cpanfile もきちんと構文が定められているので、些細な構文間違いに気付かぬままコミットしてしまうといっ…
aereal/Template-Context-SourceMap · GitHub id:r7kamura さんが作った view_source_map.gem をいいアイデアだなあ、と思っていて、折しも INCLUDE/WRAPPER が舞う嵐のようなテンプレートを抱えるアプリケーションの開発というかデバッグにおいてまさにこう…
経緯 Vagrant で立てた VM を provision する際に Chef を用いて cpanm --installdeps . を実行して依存する CPAN モジュールをインストールする Recipe を書いて実行するとたびたび NoMemoryError で Chef を実行するプロセスが殺されてしまう。まず、デフ…
今週はずっとPerlを書いていたのでいろいろ。コンテキストつらい。コンテキストがどういうものかは『初めてのPerl』とPlackなどのコードを通して概要をハハンと掴んでいた程度で実際に付き合いはじめたのは今回が初めて。使ってみての印象は最悪で動的型付け…
expat.hがないと怒られた。 $ sudo aptitude install libexpat-dev Ubuntuだとこれでビルドが通った。~/.cpanm/build.log を見ろよ、って言われたのだけど、「expat.hがないぞ」という肝心のところに辿りつくまでかなり戻らないといけなかった(関係のないエ…
#!/usr/bin/perl use strict; use warnings; use feature qw( say ); sub hoge(&) { my ($func) = @_; $func->(); } hoge { say 'call from anonymous function!' } Perlを書きはじめている。なにもかもがわからない(なにがわからないのかすら、わ…