タグ

Perlに関するtrappleのブックマーク (229)

  • 【2016年度版】このPerlハマりどころがすごい!100連発 - Hatena Developer Blog

    はじめに autovivificationを避ける myと後置ifを同時に使ってはならない return;で返る値は空のリスト 正規表現によるバリデーションでは\Aと\zを使おう '0' は偽で評価される each は中断した時、中断した時点の状態が残り続ける おわりに はじめに こんにちは。アプリケーションエンジニアの id:t_kyt です。 春です。Perlを始めるにはいい季節ですね。Perl始めていますか? どの言語にもハマりどころというものがありますがPerlも例外ではありません。というわけで今回はPerlを始めた人がハマりがちなポイントを幾つか紹介したいと思います。 この記事ははてなの教科書程度の知識を前提としています。またモジュールに依存しない部分に絞りました。 github.com autovivificationを避ける autovivificationとはundefの入

    【2016年度版】このPerlハマりどころがすごい!100連発 - Hatena Developer Blog
    trapple
    trapple 2016/04/01
  • Plack/PSGIなwebアプリケーションの実行環境 - 目の前に僕らの道がある

    この記事は、モバイルファクトリー Advent Calendar 2015 11日目の記事です ※ 投稿内容は私個人の意見であり、所属企業・部門見解ならびに技術戦略を代表するものではありません。 昨日は@rymizukiさんのnpmライブラリの運用と管理についてでした。今日はPerlの話です。 お仕事やプライベートでPerlのwebアプリケーションを書くことが多く、いろいろ知見が溜まってきてるので、ここで少し紹介しようと思います。 今回はPlack/PSGIなwebアプリケーションの実行環境の話です。mod_perlなアプリケーションとはちょっとコンテキストが違います。 少しかっちりコンテキストに近いです。個人で軽くwebアプリケーション立てるならもう少しゆるふわでも問題ないはずです。 OS UbuntuのLTSを使うことが多いです。Ubuntu前提の内容が後に続きます。 Perl Sys

    Plack/PSGIなwebアプリケーションの実行環境 - 目の前に僕らの道がある
    trapple
    trapple 2015/12/12
    実行周りの構成はみんなちょっとずつ違いそうだからこういうのとても参考になる
  • XSことはじめ - Qiita

    package Acme::MyModuele; use 5.008001; use strict; use warnings; our $VERSION = "0.01"; use XSLoader; XSLoader::load(__PACKAGE__, $VERSION); 1; #ifdef __cplusplus extern "C" { #endif #define PERL_NO_GET_CONTEXT /* we want efficiency */ #include <EXTERN.h> #include <perl.h> #include <XSUB.h> #ifdef __cplusplus } /* extern "C" */ #endif #define NEED_newSVpvn_flags #include "ppport.h" MODULE = Acme::

    XSことはじめ - Qiita
  • Scope::Guard等でリソース解放を実装する際に知っておきたいこと - Articles Advent Calendar 2012 Hacker

    みなさんガードオブジェクト使ってますか。ガードオブジェクトとは一般的には オブジェクト生成時になんらかのリソースを初期化・取得 オブジェクト解放時に該当リソースを解放 という動作をするオブジェクトをさします。 Perlではガーベジコレクションにリファレンスカウント方式を取っているため、ガードオブジェクトが解放されるタイミングが制御しやすいので比較的頻繁にガードオブジェクトを作って様々なリソースの初期化〜解放までを簡単にコントロールしたりします。 わかりやすい例で言うと、例えば現在実行中のスクリプトが動いている間だけ別プロセスでmemcachedのようなサーバーを立てたい、という時にProc::Guardなどのモジュールを使うと、以下のようなコードを仕込むだけで簡単にmemcachedプロセスを起動、終了することができます use strict; use Proc::Guard; my $g

    Scope::Guard等でリソース解放を実装する際に知っておきたいこと - Articles Advent Calendar 2012 Hacker
    trapple
    trapple 2015/10/29
  • Great Tools Heavily Used In Japan, You Don't Know.

    The document discusses Japanese Perl developers who attended YAPC::EU 2015. It introduces many popular Perl modules created by Japanese developers, such as WebService::Simple for making web service requests, Riji for creating blogs, and GrowthForecast for visualizing metrics graphs. It encourages attendees to talk to the Japanese developers about their work or any questions. It emphasizes that Jap

    Great Tools Heavily Used In Japan, You Don't Know.
    trapple
    trapple 2015/09/04
    great!!
  • 「Perl入学式の教科書」を公開しました! : Perl入学式 公式ブログ

    Perl入学式 公式ブログ プログラミング未経験者/Perl初心者を対象としたワークショップ『Perl入学式』のブログです。 一緒にプログラミングの楽しさを体感しましょう! みなさまこんにちは, Perl入学式校長のpapixです. いきなりですが, Perl入学式は今年で4年目となりました. ここまでの3年間, 多くの方と一緒にPerlを学ぶことができていて, とても嬉しく思っています. その中で, Perl入学式の卒業生からよく頂く意見の1つが, 「卒業後に使えるカリキュラムが欲しい」というものです. Perl入学式で扱う内容は, プログラミングを学ぶために不可欠な環境構築からスタートし, Perlという言語を通して「プログラミングに必要な考え方」を学んでいくという, まさに「基礎中の基礎」といえる内容になっています. 最終回でMojoliciousを利用したWebアプリケーションの開

    「Perl入学式の教科書」を公開しました! : Perl入学式 公式ブログ
    trapple
    trapple 2015/07/29
    いい!
  • 第6回 UNIXプログラミングの勘所(2) | gihyo.jp

    forkとファイルハンドル UNIX系のOSでは、複数のプログラムが、それぞれプロセスという単位で動作しています。forkというシステムコール[1]が呼び出されると呼び出したプロセスの複製がOSによって作成され、複製されたプロセス(子プロセス)がexecveというシステムコールを使って別のプログラムにすり替わる、というしくみでさまざまな処理を実行するようになっています。 「複製」と言っても、全部の情報が複製されるわけではありません。プロセスのメモリイメージが複製される[2]一方で、プロセスが開いている「オープンファイル記述」(⁠open file description)(⁠注3)は複製されません。forkのあとは、親プロセスと子プロセスの両者が、単一のオープンファイル記述を指す「ファイル記述子」(⁠file descriptor)(⁠注4)を持つことになります(図2⁠)⁠。 図2 for

    第6回 UNIXプログラミングの勘所(2) | gihyo.jp
  • cpan module を並列でインストールする - skaji's blog

    先日行われた 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

    cpan module を並列でインストールする - skaji's blog
    trapple
    trapple 2015/07/09
    cpmって名前に速さを感じる!センスいいなー
  • Webシステムにおけるデータベース接続アーキテクチャ概論 - ゆううきブログ

    先月投稿した2015年Webサーバアーキテクチャ序論では、Webサーバアーキテクチャを学ぶ道のりと代表的な実装モデルの概要を紹介しました。 今回は、前回同様、主に新卒Webエンジニア向けに、Webアプリケーションサーバとデータベースサーバ間の接続管理モデルと運用事情について紹介します。 データベース接続の永続化やコネクションプーリングとは何なのか、なぜ必要なのかといったことが主な話題です。 背景 データベース接続の永続化とはなにか データベース接続のオーバヘッド データベース接続の永続化手法 コネクションプーリングとはなにか コネクションプーリング: ドライバ型 コネクションプーリング: プロキシ型 コネクションプーリング全体について PostgreSQLMySQL 参考資料 まとめ 背景 2015年Webサーバアーキテクチャ序論では、Webサーバアーキテクチャの話とWebアプリケーショ

    Webシステムにおけるデータベース接続アーキテクチャ概論 - ゆううきブログ
  • リロケータブル Perl - skaji's blog

    tl;dr github の release ページ からすきな場所に置けば使える perl がダウンロード可能 リロケータブル perl って? 通常 perlbuild 時に モジュールの読み込み 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 - skaji's blog
    trapple
    trapple 2015/06/30
    めちゃ便利だ
  • cpanm towards 2.0 (Menlo)

    First, little bit of background: I was working on cpan-common-index branch for cpanm and the branch adds CPAN::Common::Index and its all subdeps, which might make fatpacking on 5.8 difficult because of the amount of its non-core dependencies, some of which are dual XS/PP. To clarify: it’s not impossible, but just harder and more stuff to add to be able to bootstrap on 5.8. Also, at this point I’d

  • DBIx::TransactionManager の目的と、その使用法について - tokuhirom's blog

    おはようございます。 DBI では当たり前のように $dbh->do('BEGIN') と $dbh->do('COMMIT') をつかえばトランザクションがつかえるわけですが、なぜ DBIx::TransactionManager のようなものが必要になったのでしょうか。 それは勿論、DBI で直接 transaction をとりあつかうと問題が発生するケースが存在するからです。 トランザクションと RAII一番おおきいのは、トランザクションが中途半端な状態になってしまうことを阻止することです。たとえば、以下のようなケースでは、おかしなことになってしまいます。 my $dbh = DBI->connect(...); for (@stuff) { eval { $dbh->do("BEGIN"); $dbh->do(q{INSERT INTO t1 (v) VALUES (?)}, $_

  • STDIN/STDOUT を使うテスト - tsucchi’s diary(元はてなダイアリー)

    仕事メモ。 インタラクティブなコンソールアプリケーションだと、STDIN/STDOUT を使ったやりとりが発生します。こういうのをテストするときに、いままでは、 { local *STDOUT; open(STDOUT, '>', 'stdout.txt') do_something(); #STDOUT を使う何か close(STDOUT); } open(my $MY_STDOUT, '<', 'stdout.txt'); #... $MY_STDOUT の中身を読み出してテストする みたいな処理を書いて、ファイルの中身でチェックしてました。(STDIN の場合は逆で、入力データをファイルに書いて、捻じ曲げた STDIN をアプリに読ませる)。 ファイルを噛ませるのが嫌だったのと、ちょっとトリッキーなのが気に入らなかったので、モジュールを使ってもうちょっと優雅に(?)書けないかな、と

    STDIN/STDOUT を使うテスト - tsucchi’s diary(元はてなダイアリー)
    trapple
    trapple 2015/06/05
  • Text::UnicodeTable::Simple - 全角文字を含むテキストテーブルを描く - Articles Advent Calendar 2011 Hacker

    前置き こんにちは. syohexと申します. みなさん意識は高まっていますか ? 私は若干微妙ですが, 上々です. 今回は拙作の Text::UnicodeTable::Simpleというモジュールを紹介します. 現在 CPANにアップされている私の唯一のモジュールでもあります. Text::UnicodeTable::Simpleはテキストで表を書くというモジュールです. 同様のモジュールは Text::Table, Text::ASCIITable, Text::SimpleTable等多数存在しているのですが, ひらがな, カタカナ, 漢字といった全角幅の文字を含めると表がずれるという問題があります. Text::ASCIITable::TWという一部の言語に特化したものはあるんですが, Moose依存であったり, 何より使用言語が限られるのは避けたかったので一から作りました. T

    Text::UnicodeTable::Simple - 全角文字を含むテキストテーブルを描く - Articles Advent Calendar 2011 Hacker
    trapple
    trapple 2015/06/04
    Text::ASCIITableで苦戦してたけどこれで一発だったわいわい
  • Perl 5.22がリリースされました - 数学関連の機能強化、メソッドのパフォーマンスの改善、正規表現の改善 - Perl入門ゼミ

    Perl › バージョン情報 › here 2015年6月1日に、最新バージョンのPerl 5.22がリリースされました。 Perl 5.22 リリース 今回のリリースでは、活発な機能追加が行われています。 パフォーマンスの改善 Perl 5.22の一番うれしな点は、性能改善です。マルチデリファレンスの構文解析とメソッドの構文解析の改善によって、パフォーマンスがアップしています。 複数階層のデリファレンスの性能改善 Perlの内部パーサーは、複数階層のデリファレンスを効率的に解析できるようになりました。このために、複数階層のデリファレンスのパフォーマンスが上昇しています。 $scores->[0]{math}; メソッド呼び出しとSUPER擬似クラスの性能改善 メソッド呼び出しと、SUPER擬似クラスは、事前に解析され、その情報がキャッシュされるようになっています。そのため、実行時の、メソ

    Perl 5.22がリリースされました - 数学関連の機能強化、メソッドのパフォーマンスの改善、正規表現の改善 - Perl入門ゼミ
    trapple
    trapple 2015/06/03
  • Carmel を読む - skaji's blog

    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::

    Carmel を読む - skaji's blog
  • Perlの食えない事情 - 演算子編 - アリ

    Perlえない事情 より おっと、そうです、Perlには演算子が多すぎるのでした。せっかくの機会なので、Perlの演算子を紹介します。 ビーナス演算子: 0+, +0 数値として評価してくれます。意外とよく見かけますね。 なぜこの演算子を使う必要があるのかというと、Perlは文字列と数値を明確に区別できないからです。scalarを文字列として解釈するならば文字列として、 print 0+ '10'; #=> 10 print 0+ '123b'; #=> 123 print '1.2e3' +0; #=> 1200 print [] +0; #=> 4303367864 ちなみに、文字列として評価するときにはこのようにするとかっこいいと言われています。 $obj.q(); 一見メソッド呼び出しのように見えますが $obj . ''; と等価です。 ベビーカー演算子: @{[ ]} 文字

    Perlの食えない事情 - 演算子編 - アリ
    trapple
    trapple 2015/04/25
    深淵なり
  • Qudo, daemontools, capistranoを使ってWorker処理の仕組みを作る - $shibayu36->blog;

    最近PrePANの開発を手伝っていて、Workerの仕組みをQudoで作りました。初めてWorkerの仕組みを一から作ったのでメモしておきます。 Worker処理に必要な部品、それぞれのQudoでの実装、Workerプロセスを管理するためのdaemontools、capistranoでのdeployという順番で書いていきます。 Workerとは ざっくり言うと非同期に色々実行するための仕組みです。perlだとTheSchwartz、Qudo、Jonkとかがあります。 Worker処理に必要な部品 今回作ってみて、Worker処理は大きく分けて次の三つくらいのものが必要だと分かりました。 ApplicationからJobをinsertする部分(Qudo) 実際のJobの処理(Qudo::Worker) Jobの実行を管理して、Jobに処理を委譲する部分(Qudo, Qudo::Paralle

    Qudo, daemontools, capistranoを使ってWorker処理の仕組みを作る - $shibayu36->blog;
    trapple
    trapple 2015/04/23
    簡単だった!
  • 「Cartonの内部」について社内勉強会で発表した - $shibayu36->blog;

    Perlのバージョン管理ツールであるCartonの内部について、社内勉強会で発表したので、その時の資料をそのまま公開する。けっこう雑に作ってしまったので、正確性については保証できないけど、Cartonのソースコードリーディングの際の参考になればと思う。 アジェンダ Cartonとは いろいろトラブル carton installの挙動を理解する Cartonとは Perlのモジュール管理ツール 依存モジュールを特定のバージョンに固定して、インストールしてくれる Cartonとは(深堀) 一番重要なのはcarton install 基的にはcpanmのラッパーとしてcarton installが実現 Module::CPANfileなど、小さいモジュールを組み合わせている いろいろトラブルもある cpanfile.snapshotが環境によって変わる carton install --de

    「Cartonの内部」について社内勉強会で発表した - $shibayu36->blog;
  • Carmel

    I shipped a few trial versions of Carmel to CPAN. Carmel is intended to be a successor of Carton, with a better internal structure and an interesting architecture change. As a starter, here’s how Carton works: use local::lib and cpanm’s -L option to install modules locally to ./local Scan meta/install.json file cpanm created under ./local and create a snapshot file for the next run, if there’s a s