その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

perl

awesome-perlのご紹介およびメンテナの大募集

こんにちは。id:moznionと申します。Hachioji.pmというIT技術コミュニティに所属しています。本記事はPerl Advent Calendar 2020の記事として記述されています。前日の記事は@mihyaeru21さんのGitHub Actions で Perl を動かすときのテンプレートでした。 Ha…

Email::MIME::ContentType が build_content_type と build_content_disposition を提供するようになっていた

Perl の話です.metacpan.orgEmail::MIME::ContentType 1.023 (なお本バージョンは TRIAL Release となっています) 以降から build_content_type と build_content_disposition という関数が追加されています.それぞれ名前の通り Content-Type と Content-D…

aws-lambda-perl5-layer 書いた

[2018-12-05 追記] ビルド済みのLayerを公開しましたので,そちらを使うと便利です. See also: http://moznion.hatenablog.jp/entry/2018/12/05/211523 [追記ここまで]先日のre:InventでCustom AWS Lambda Runtimesが発表され*1,これはつまり任意の言語でA…

PerlのYAMLライブラリ性能比較

なんと2018年の記事です.皆様無事明けられておりますでしょうか.さてYAML::XSには2017年に色々と変更が入り,実用するにあたり非常に便利な機能が色々と導入されました (具体的に言うと,$YAML::XS::LoadBlessedと$YAML::XS::Booleanです).また安定化が図…

JSON::XSでデシリアライズする時にtrueとfalseの扱いを変更する

Perl5の話題です. JSON::XSを用いて,JSON StringをPerlのHashRefにデシリアライズする時にtrueとfalseの扱いを変えたいという話です.デフォルト状態でJSON::XSを用いてデシリアライズすると, true は Types::Serialiser::true すなわち JSON::PP::Boolea…

List::Haystack - A immutable list utility to find and count element

Perl5の話題です.List::Haystackというものを書きました.CPANにもアップロードしています. 経緯としては以下.Perl,immutableな感じで,List (Array) 中から要素をfindしたり,出現回数を取るモジュールって存在しているんでしたっけ— パブリックイメー…

Perl5のサブルーチン呼び出し時に二項演算子を期待していたら単項演算子の引数として認識されてしまう

sub func { return 100; } みたいなサブルーチンがあった時に, say(func - 99); みたいな感じで呼び出すと,パッと見 1 が出力されそうに見えるが,実際は 100 が出力される. これは - 99 が func の引数として解釈されて食われるためである. B::Deparse …

Test::Fluent::Logger書いた

表題の通りです.Perl5の話です.CPANにもあげてあります.https://metacpan.org/pod/Test::Fluent::Logger何をするモジュールかというと,useするだけでFluent::Loggerのpost及びpost_with_timeの内容をインターセプトして,本来送るべき宛先には送らずに内…

YAPC::Asia Tokyo 2015 で Yet Another Perl Cooking というタイトルで話してきました

話してきました.以下がスライドとなります.登録時にスライド字幕を誤って「英語」にしてしまったばかりに英語スライドとなっております. 「画像がヤベえ!!」とか言われたんですが,まあこれで発表したんだし公開するスライドの画像を修正するのも違うよ…

plenv で stableperl を利用するの術 & stableperl の話

[追記] (旧タイトル) Perl::Build (plenv) で stableperl が利用できるようになりました & stableperl の話色々あって方法が変わったので内容を修正します Perl::Build (plenv) で stableperl が利用できるようになりました & stableperl の話Perl::Build 及…

文字列内のバックスラッシュを区別したい的な

タイトルが適当すぎて何を言っているのかわからないと思いますが,まあそういう事がごくごく稀にあります.結論から言うとヒアドキュメント使えば良いです.以下の様な文字列を考えた時, my $string = '\n\\'; これを1文字ずつ処理しようとすると, say $_ …

Regexp::Lexerってやつを書いた

https://metacpan.org/pod/Regexp::Lexer https://github.com/moznion/Regexp-Lexer Perlの正規表現を解析したいなー,と思った時にまず目につくのはRegexp::Parserだと思うのですが,このモジュールは解釈できないメタ文字や構文が多い為,実用にあたっては…

Excel::Writer::XLSXのset_optimization()について

基本的にExcel::Writer::XLSX使うときは my $workbook = Excel::Writer::XLSX->new('yabai.xlsx'); my $worksheet = $workbook->add_worksheet(); ... みたいな感じで使うと思うんですが,素朴にこれでやっていこうとするとExcelの行数が増えた時にメモリを…

YAPC::Asia Tokyo 2014に参加致しました

YAPC::Asia Tokyo 2014に参加致しました.例年はgihyo.jpのリポータという事で参加していたのですが,今年は僕の怠慢でリポータではなく,初の一般参加でした.とはいえ, YAPC::Asia Tokyo 2014でPerl::Lintについて喋りました - その手の平は尻もつかめる…

YAPC::Asia Tokyo 2014でPerl::Lintについて喋りました

タイトルのとおりです. スライドは以下です. もうちょい詳しく話す予定だったんですが,冒頭のライブリリースに失敗するなどして出鼻をくじかれテンパってしまいました…… ちょっと詳しい話をすると, ポリシー周り 各ポリシーがトークンを受け取って,それ…

YAPC::Asia Tokyo 2014でPerl::Lintについて喋ったりします

おわび Perl::Lint出来てません 本題 明日8月28日(木)から3日間に渡ってアジア最大のPerlのカンファレンスであるところのYAPC::Asia Tokyo 2014が開催されますね! 楽しみですね! 夜も眠れないですね! さて,そのYAPC::AsiaでわたくしPerl::Lintという開発…

XSのABRTをキャッチしたい

このPerlコード実行するとSIGABRT発生するんだけど,これなんとかtrapできないのかな https://t.co/HeB6uvrl5z— Lint it (@moznion) 2014, 8月 17 supervisord使ってても,アプリで使ってるXSライブラリがABRTを吐いたらアプリごと死んでついには生き返らな…

Published “Perl::Lint Playground”

(またしても日本語は下にあります / Japanese follows English) I published “Perl::Lint Playground”. http://perl-lint.moznion.net/ You can try feature of Perl::Lint easier on this playground. However this and Perl::Lint have not been completed…

Released Perl::Lint as underdevelopment

(日本語は下にあります / Japanese follows English) I've just released Perl::Lint as underdevelopment. https://metacpan.org/release/MOZNION/Perl-Lint-0.01_01 Development of Perl::Lint is in progress, but I need feedback about this module. Th…

先読みとautovivificationの話,あるいはマイクロオプティマイゼーションの話

Perlの話です.が,先読みの辺りはどの言語でも共通なのでは,という感じです. 追記 なんか先読み関係ない感じになってるのでコメント見ると良いです.この記事の情報は誤っているので後で書き直す. ここから先は読まなくても良い さて,配列を走査するよ…

Time::SecondsのONE_MONTHとONE_YEARについて

Time::SecondsのONE_MONTHとONE_YEARを使う場合,本当にその方法で良いのかよく考えたほうが良いと思います.バグが出る可能性が高い気がします.例えば以下の様な場合 use Time::Piece; use Time::Seconds; my $tp = localtime->strptime("2014-04", "%Y-%m…

Released Log::Minimal::Object

皆さん,Perlのアプリケーションのログを出力したい時はLog::Minimalをご利用のことと存じます.非常に便利でグレートなモジュールなので僕も毎度使っております. さて,そのLog::Minimalですが,ログの出力をカスタムしたい時には$Log::Minimal::COLORや$L…

Released Parse::KeyValue::Shellish

https://metacpan.org/pod/Parse::KeyValue::Shellish https://github.com/moznion/Parse-KeyValue-Shellishfoo=barだとかhoge=(fuga piyo)みたいな,いわゆるshell的なkey-valueを解釈する必要があったので書きました.shell的key-valueの文字列を解釈してh…

Released Perl::PrereqScanner::Lite

(日本語は英語の後にあります) I released Perl::PrereqScanner::Lite.https://github.com/moznion/Perl-PrereqScanner-Lite https://metacpan.org/release/Perl-PrereqScanner-Lite This module is the fast edition of Perl::PrereqScanner. Perl::PrereqS…

App::GitHubWebhooks2Ikachanが出た

長い名前だ!!! そしてマニアック. https://metacpan.org/release/App-GitHubWebhooks2Ikachan https://github.com/moznion/App-GitHubWebhooks2Ikachan これは何 GitHubのWebhooksを受け取って,いい感じにしてIkachanに投げる君です. 現状,issues,pu…

B::perlstringを使って文字列中のダブルクォートを適切にエスケープする

文字列中にエスケープされていないダブルクォートがあった時に,例えば文字列evalしようとするとずっこける事があります.以下の様な感じ. なぜ失敗するかというと,eval "$str"がeval "hel"lo"という風に評価されてしまうからなんですね.これではlo"がinv…

Yokohama.pm #10に参加してきました

Yokohama.pm #10に参加して参りました. Yokohama.pmヤバくて,無限にビールは飲めるわ有限に食事はできるわ,加えて学びを得られるわで最高のイベントと言っても過言ではない感じでした.KAYAC社はすごい. さて,詳細なレポートなどは他の参加者の方が素晴…

Localizerが出た

http://blog.64p.org/entry/2014/02/17/192612Localizerと言うのはYet Another Framework for Localizationのことで,国際化対応のための新しいフレームワークです.インタフェースが従来のものよりイカしていて良いと思います. Gettextのコンパイラの実装…

Digest::MD5のもろもろに関して

第一部 まず,id:amagitakayosiさんのブログ記事に関しまして. http://amagitakayosi.hatenablog.com/entry/2014/01/31/174915これの結果がおかしいのは,普通に関数で呼び出すべき所をクラスメソッドみたいな感じで呼んでいる為です.これではclassがdiges…

正規表現で,他の条件にマッチしない文字列を取得したい

メモ書き程度です. 例えば,aaafoobbbbarcccfoodddみたいな文字列があった時に,fooとbarにマッチしない文字列が欲しい時には以下のように書くと良い. $str =~ m/(.*?)(?:foo|bar)/g; 実行すると以下のような値が得られる. $VAR1 = 'aaa'; $VAR2 = 'bbb';…