Perl

Test::Perl::Critic その3

Test::Perl::Criticは、Perlベストプラクティスのポリシーをどのていど厳格に守るのか設定が可能。 設定は、Perl::Criticと同じようにできる。 今回のエントリーは、その設定項目について。 設定方法 useにリストとして指定 use Test::Perl::Critic ( -profi…

Test::Perl::Critic その2

今日はサブルーチンについて。 critic_ok( $FILE [, $TEST_NAME ] ) # t/991_perlcritic.t use strict; use Test::More; eval { require Test::Perl::Critic; Test::Perl::Critic->import(-profile => "t/perlcriticrc") }; plan skip_all => "Test::Perl::C…

Test::Perl::Critic その1

社内勉強会で発表するためのメモその1 概要 Test::Perl::Critic wraps the Perl::Critic engine in a convenient subroutine suitable for test programs written using the Test::More framework. Test::Perl::Critic - Use Perl::Critic in test programs…

YAPC::Asia Tokyo 2011に行ってきた。感想というより反省。

1ヶ月近く経つのに、未だに自分の中でYAPCが終わってなかったのでいい加減終わらせておく。 タイトルの通りYAPCに行って来た。 二日間のチケットを買ってはいたんですが、一日目は仕事があって不参加。 二日目は寝坊してしまい遅刻して参加、70周年講堂での…

Maybeを知った。

package Test; use Mouse; has hoge => ( is => 'rw', isa => 'Str', ); package main; my $test = Test->new; $test->hoge( undef ); こんな感じで、isaでStrを指定したアトリビュートにundefを書き込もうとすると怒られる。理由は簡単で、Str型は文字列で…

Imager::QRCodeではまった。

pngのQRコードを作ろうとしていろいろとはまった。 pngのフォーマット対応してないよってエラーが出てる。 libpngがインストールされてないか確認。 libpngインストールされてる。 何だこれ状態。でいろいろ調べる。 tokuhiromさんのエントリーを見つける。 …

スライスでのデータアクセスのパフォーマンス

スライスでのアクセスのほうがパフォーマンスが出ると思っているが、 実際どの程度の差なのか少し気になったので測ってみた。 datafile.yaml データ構造を考えるのがめんどくさかったので、ここから拾ってきました。 るびま teams: - name: Akudaman members…

フィボナッチ整列を求めるようなサンプルコード

とある事情で書いたけど、本当に必要だったのは違うものだった。 まぁせっかくなので、ブログに書く。 use strict; use warnings; use Math::BigInt; { my @fibonacci_number = (); sub fibonacci { my $num = shift; unless ( $fibonacci_number[$num] ) { …

Twitter APIについて少しだけ調べてみた。

タイムラインを取得して、つぶやきに含まれているURLを抜き出してみたかった。 Twitter API API上でつぶやきのことは、status と表現されている模様- タイムラインの取得には、statuses/home_timeline または、statuses/friends_timeline を使うと良さそう …

続・はじめてのPerl 11章

11章 オブジェクト入門 11.1 動物と話すことができたら use strict; use warnings; sub Cow::speak { print "a Cow goes moooo!\n"; } sub Horse::speak { print "a Horse goes neigh!\n"; } sub Sheep::speak { print "a Sheep goes baaah!\n"; } my @pastu…

無名ハッシュコンストラクタのブレースの前に+を付けないといけないケース

気になったので調べてみた。 perlrefを見れば一発だった。 そもそも+を付けるって何 中かっこは、BLOCK を始めとして他のことにも使われますから、 開きの中かっこが BLOCK の開始でないことを Perl に教える ために文の最初の中かっこの前に + や return を…

続・はじめてのPerl 10章

10章 大規模なプログラムの構築 10.2 evalによるコードの挿入 # Example.pm sub println { my $message = shift; print "$message\n"; } # sample.pl sub load_common_subroutin { my $pm_file = shift; open my $code_fh, $pm_file or die $!; undef $/; my…

インクリメントのベンチマーク

Perlは、プリインクリメントとポストインクリメントに性能差が殆ど無いと、 初めてのPerlか、Perlベストプラクティスかに書いてあった気がした。実際どうなのか、前から気になっていたのでベンチマークを取ってみた。 ベンチマークスクリプト use Benchmark …

続・はじめてのPerl 9章

9章 リファレンスを使った実践的なテクニック 9.1 ソートとは sort演算子 デフォルトの動作は、テキスト本来の順序付け 現在のロケールと、文字セットで決まるソート順 詳細は、perllocale 他のソート順でソートしたい場合 ソートアルゴリズムを書く必要はな…

IO::Teeのマルチプレックス(多重化)について調べてみた

続・はじめてのPerlの 8.4.4でIO::Teeが紹介されてるが、 サンプルコードの動作とコメントが一致していないような気がしたので、調べてみた。 # 続・はじめてのPerl P104 の擬似コード use IO::Tee $tee_fh = IO::Tee->new( $read_fh, $log_fh, $scalar_fh )…

続・はじめてのPerl 8章

今日も(ry 8.1 古い方法 ファイルハンドルはデータ型の1つ ライブラリや、コードの他の部分で共有するには? 型グロブや型グロブリファレンスを使う 型グロブ 名前のすべてのパッケージ変数を指すポインタを格納している 型グロブを別の型グロブに代入す…

続・はじめてのPerl 7章

今日もやっぱりまとめなんです。 7章 サブルーチンへのリファレンス 7.1 名前付きサブルーチンを参照するには サブルーチンのリファレンス コードレフとも呼ばれる バックスラッシュ演算子を使い、取得する 配列やハッシュのリファレンスの取得方法と同じ サ…

続・はじめてのPerl 6章

6章 複雑なデータ構造の操作 6.1 デバッガを使って複雑なデータを見るには デバッガの起動 -dスイッチを指定してPerlを起動 $ perl -d sample.pl デバッガの使い方 デバッガは、今から実行する行を出力しコマンド入力を待つ sコマンド プログラムのシングル…

続・はじめてのPerl 5章

今日もまとめ。 5.1 データへの複数のリファレンス Perlは参照カウンタによって、データにアクセスできるルート数を管理 配列の作成で、まず1カウント それに対するリファレンスを作るたびに1カウントされる 参照カウンタが0にならない限り、配列をメモリ内…

続・はじめてのPerl 4章

今日もまとめなんです。。。 4章 リファレンス入門 4.1 多くの配列に対して同じ処理を実行するには サブルーチンに配列を渡す サブルーチンで、渡された配列に要素の追加は行えない それを行うためにリファレンスを使う 4.2 配列へのリファレンスを取るには …

続・はじめてのPerl 3章

今日もまとめ 3章 モジュールの使い方 3.1 標準ディストリビューション ポピュラーなモジュールは、すでにPerlに付属されている 5.003_07 98個 5.8.8 359個 これらを「コアモジュール」または、「標準ディストリビューション」と表す Module::CoreListを使い…

続・はじめてのPerl 2章

まとめ。 2章 中級者の基礎知識 2.1 リスト演算子 print 1つ以上の引数を与えると1つにまとめる もっともよく使われるリスト演算子 sort 入力リストを順番に並べ返す reverse 逆順のリストを返す その他にも多くのリスト演算子 2.1.1 grepによるリストのフィ…

改行コードの取り扱いについて勉強しなおした。

一つ前のエントリーを調べるに当たって勉強しなおしたのでまとめる。\r, \n を各環境下で出力した場合、出力されるコード値それぞれ以下のようになる模様。 Linuxの場合 \r は \x0d として出力され、 \n は \x0a として出力される。 $ perl -e 'print "\r\n"…

「優れたPerlプログラマを見分ける27の質問」にチャレンジしてみる。

念のため続きを読むで答えてます。(3/2 参考を追加)

\cM\cJ って何。

binmodeのドキュメントに出てくる、\cM \cJ が何を意味しているのか分からなかったので調べた。\cM、\cJ は制御文字で、 \cM は、\r と同じ。 \cJ は、\n と同じ。という結論に至ったのだが、合ってるのかな。 #!/usr/bin/perl print unpack( "H2", "\cM" ),…

cpanm でローカル開発環境構築

以前からcpanmを使ってローカル環境にモジュールを突っ込んではいたのですが、 パスの設定など場当たり的にやっていたので、改めて設定しなおしました。 参考 http://d.hatena.ne.jp/tokuhirom/20110201/1296530510 cpanmによるPerlのローカル環境構築 - Per…

Config::Pit を使ってみる

Hokkaido.pm#4にて、aloelightさんが紹介されていたモジュール。 Config::Pitとは? アカウント情報の管理にConfig::Pitを使用することによって、コードからアカウント情報を分離できます。アカウント情報が格納された設定ファイル自体は、~/.pit/ 内に格納…

画像がら位置情報を取得する

Hokkaido.pm#4で紹介されてたので、自分でもやってみる。 紹介されていたのは、Image::ExifTool を使った位置情報の取得方法だったが、 天邪鬼な自分は、別のモジュールを使ってやってみる。 とはいっても、Image::EXIF を使うだけなので労力は大して変わら…

Crypt::SSLeay のインストールではまったので、メモ。

cpanmでCrypt::SSLeayをインストールしようとして、失敗した。build.logを確認すると、以下のようなエラーが出てる。 No installed SSL libraries found in any of the following places. /local /local/ssl /opt/ssl /usr /usr/local /usr/local/ssl /usr/l…

utf8プラグマ使用時の文字列のバイト数の取得方法

bytesプラグマを使うことで解決する。 (11/02/12)追記しました何もせずに length をしてみると。 use strict; use warnings; use utf8; my $str = "あいうえお"; print length $str,"\n"; 結果は文字数。 5 以下の用に bytesプラグマを使うことで、バイト…