えてして、プログラミングにおけるバグの発生源は、使い方をまちがえていることに起因するものも多い。 猫を電子レンジでかわかす人がいるように。 そもそも chomp() という組み込み関数はなぜ必要なのか。 Perl5 では、データを行単位で処理するということが重視されたインターフェイスになっている。これは一般的なテキスト処理の頻出パターンだからだ。 while (<>) { chomp; say if /foo/; } これは、入力データを行ごとにとりだし、改行をとりのぞき、/foo/ という正規表現にマッチする行だけを表示するというプログラムだ。 Perl5 を知っている人なら、だれもが簡単に理解できる。 ここで $/ という変数が問題となる。$/ は、行の区切りがはいっている特殊なグローバル変数で、awk でいうところの RS にあたるものだ。 この $/ を変更することにより「行」の区
Text::Xslate 2.0010 contains serious issue fix around 5.18 incompatibility. Perl 5.18+ does not allows "Wide characters" as PerlIO::scalar's input string. It says Strings with code points over 0xFF may not be mapped into in-memory file handles. Older Text::Xslate using PerlIO::scalar for processing vpath. vpath is mostly using with Data::Section::Simple. And so, if you are using Data::Section::Sim
DATA からデータをよんでいるときに、今ソースコード全体のうち、何行目をよんでいるかを知りたいというケースがある。 そんな場合は以下のようにすればよいだろう。 #!/usr/bin/env perl use strict; use warnings; use utf8; use 5.010000; use autodie; use Fcntl qw(:seek); my $line_number; my $pos = tell(*DATA); seek DATA, 0, SEEK_SET; read DATA, (my $buf), $pos; $buf =~ s/\n/$line_number++/ge; while (<DATA>) { warn $line_number + $. . " : " . $_; } __DATA__ hoge fuga hige そもそも *DATA
いよいよ今週から YAPC だ。YAPC にあわせて、Perl5 の内部構造を復習できるエントリーを書いたのでご一読いただきたい。 Perl5 hack においては、XS をつかった B optree の操作が楽しい。B optree というのはいわゆる AST(抽象構文木) である。Perl5 は byte code interpreter などではなく昔ながらの AST をそのままなめるインタプリタである。であるから、この B optree を操作すれば、簡単にインタプリタの挙動を変えられるというワケ。 一方で、B optree の操作については、あまり知られていないし情報がすくない。日本語でも情報がすくないし、英語でもまた情報がすくなく、それっぽいモジュールのコードをよみながら会得するしかないのが現状だ。 すこしでも B 初心者が、ステップアップできるように、私のもっている情報をここ
Perl 5.20 で、CPANPLUS とその依存モジュールたちが core distribution から分離されます。 また、5.22 では CGI.pm と Module::Build が分離されそうです。 ここにいたり、Perl 5 の core distribution にはいっている、ということの意味が徐々にかわってきつつあります。 では、現在の状況はなぜおきているのかを考えてみましょう。 configure_requires の普及Perl 5.8.5 あたりの時代では、Module::Build などは core distribution にはいっていないと、つらかったわけですが、configure_requires が普及したことにより、インストーラを CPAN shell で自動的にインストールすることができるようになりました。 これにより Module::Build
Here is a code: #!/usr/bin/perl use strict; use warnings; use HTTP::Tiny; use File::Basename qw(basename); my $pkg = shift or die "$0 Module::Name\n"; $pkg =~ s!-!::!g; my $http = HTTP::Tiny->new; my $res = $http->get("http://cpanmetadb.plackperl.org/v1.0/package/$pkg"); die "Failed! $res->{status}: $res->{reason}\n" unless $res->{success}; if ($res->{content} =~ /distfile: (.*)/) { my $url = "htt
Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at
Perl5 ではハイフンを含む関数名が定義できません。しかし、どうにかして定義することはできないものでしょうか。 はい。定義するだけならがんばればできます。 package Foo; sub new { bless {} } { no strict 'refs'; *{"hoge-fuga"} = sub { die "YAY!\n"; }; } しかし、これをよぶにはいったいどうしたら。。。 my $foo = Foo->new; $foo->can("hoge-fuga")->(); はい。can で coderef をとればうまくいきました。 しかし、ちょっと無理矢理すぎて、使い勝手はすごくわるそうです。 使うのはあきらめたほうがよさそうですね!
よく miyagawa さんとかが comaint が云々といっていますが、意外としられていないのが comaint の実態です。 まずは PAUSE の処理フローについて考えてみましょう。 まず minil release とかして tar ball を PAUSE のサーバーにアップロードします。この時、アップロード先は authors/id/M/MO/MOZNION/HTML-Shakan-0.18.tar.gz とかになります。 そうすると PAUSE のインデクサがブンブンと動きだして、META.json の provides セクションまたは .pm を解析して、package とバージョンの情報が抽出され、データベースに登録されます。 この際、新規ネームスペースや、自分がもってるネームスペースならいいのですが、他の人がもってる namespace の場合には UNAUTHOR
Carton 1.0 では carton exec が cpanfile.snapshot を読むようになっています。 なので、PERL_CARTON_PATH を設定して carton exec していて、current directory に cpanfile がないような場合には Can't locate cpanfile: (cpanfile) というエラーになって乙る場合があります。 このようなケースをさけるために、PERL_CARTON_PATH を設定している人が 1.0 にあげるときには PERL_CARTON_CPANFILE を設定しておいた方が無難です。 なお、PERL_CARTON_PATH は local/ の位置をあらわし、PERL_CARTON_CPANFILE は、cpanfile の位置をあらわす環境変数となっております。
Carton 1.0 がでたところで、Web アプリケーション開発のフローを一度見直しておきたい、そんな人も多いでしょう。 そんな方のために僕のやりかたをまとめました。各社、議論の叩き台にしていただければよろしいかと存じます。 もっとも重要なことは、、 Carton を使うときに、僕が最重要だと思うことは、できるだけ本番環境と開発環境の環境をそろえるということです。CPAN モジュールが本番と開発でバージョンちがうから挙動がちがってた!! なんてのは時間の無駄ですし、よくないことですからね。 ですから、各開発環境と本番環境をできるだけそろえることを意識していきたいとおもいます。 DarkPAN は使ってない そんなに DarkPAN 的なのを使うほど、DarkPAN 的なオレオレモジュールがないので、git submodule で管理しています。 【201308061241update】
今日リリースされた common::sense-3.7 が壊れていた影響で、日本の皆さんが混乱しているようなので、丁寧な JSON::XS の歴史解説エントリをここに記す。 perl-5.18 の hash randomization に関するゴタゴタ 5.17 で JSON::XS のテストがこける hash randomization の影響。これにたいし、mlehmann 氏は、hash randomization ではセキュリティが強化されないし、意味がないと主張。 修正版をリリースしない。 reini 氏、Cpanel::JSON::XS をリリース(2013-03-01) https://metacpan.org/module/RURBAN/Cpanel-JSON-XS-2.33_03/XS.pm JSON::XS の修正がなされないので、ついに forkの術。 reini 氏
英語の勉強とかしなきゃなあ、とおもいつつもあんまりやる気もしない、という皆様こんにちは。 僕は最近、通勤にそれなりに時間がかかるというこの東京砂漠に在住するという状況をいかしまして、 適当に英語を勉強しなくてはならないという意識にめざめました。 そこで、Kindle で英語の本をよんだりしています。O'reilly などはたまに引くぐらい安くセールしているときがあるので そういったときに買っておくとよいです。HTML5 とか JS 関連の本は、本自体がうすいものも多くて、そういうものは得に安いです。 Kindle のハードは、 Kindle touch を愛用しております。 普段、Web をみるときには、Google chrome の Pocket 拡張をいれておきまして、気になった記事をいれております。 英語の記事と、あとなんか長文の増田とかが多いです。 英語は Planet Perl
YAPC::NA 2013 に参加してきました。その中でも印象にのこったことを取り急 ぎアップしておきます。 今回は日本からは @yusukebe と @xaicron と TPF の President である Karen が参加していたようです。 僕は今回がはじめての US だったので、いろいろと困惑することもありました が、旅行記などには興味がないという人も多いでしょうし、書くのがめんどく さいですし、たぶん xaicron が書くと、ほとんど内容がかぶるので割愛させ ていただきます。 デニーズのシェイクに興奮する yusukebe と xaicron 本エントリーでは YAPC::NA で僕が感じたこと、技術的に Perl Community が どこに向いているか、といったあたりのことについて述べていきたいとおもい ます。 今年は Perl 25 周年ですので、これまでの Per
https://github.com/tokuhirom/Harriet/https://metacpan.org/module/TOKUHIROM/Harriet-0.01/lib/Harriet.pmテストのときにつかう mysqld, memcached, stf, groonga あたりのデーモンを、.t 単位で起動していては遅くてかなわない。かといって、あらかじめ起動させておくというのも。。 というわけで prove のプラグインとしてよしなにする、みたいなのをがんばってかく、というような試みがおこなわれてきたわけですが、どうもめんどくさい。 なんか適当にやったらうまくうごく、っていうかんじのカジュアルなツールがほしいな、なんておもったりするわけですよ そこで、Harriet ってのをつくってみました。 なんかこう、t/harriet/mysqld.pl っていうファイル名でこん
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く