Perl

続・importとExporterの食い合わせが悪い?

importとExporterの食い合わせが悪い? - だるろぐ跡地で神からブックマークコメントでこんなことを教えられる。 一応こうしたらいけるけど。 http://gist.github.com/88613 どれどれ。動いた。 なるほど、Mod3でimportを作ったから、Exporter::importをオー…

importとExporterの食い合わせが悪い?

useしたらpという関数が使えるようにしよう。 Mod1.pm package Mod1; use strict; use warnings; use base qw/Exporter/; use Data::Dumper; our @EXPORT = qw/p/; sub p {warn Dumper shift} 1; main.pl use Mod1; p 123; 実行 % perl main.pl $VAR1 = 123;…

parent.pm読んでみた

深夜にバカやってないで会社でバカやりましょう、いつも通り。 自分がクビにならないのが常々不思議である。 parent.pm 中にはメソッドはimportが1個のみ、行数も少ない。これなら軽く読める。 package parent; use strict; use vars qw($VERSION); $VERSION…

parent.pm書いた人が分かってらっしゃりすぎる件

importとExporterの食い合わせが悪い? - だるろぐ跡地は、要はimportとExporterの中身を知らないのが原因だ。 なので importを調べる base.pmを調べる そういえばparentってbaseと等価だけどどんな実装になってるんだろ、といつも通り脱線する parent.pmを…

毎回use strict/warnings書くのがめどい

MooseやMouseはuseするだけで、use strict/warningsしたことになる。 便利だなーパクろうと思ってMooseを見る。分からなかったのでMouseを見る。分かった。 package Hoge; use strict; use warnings; sub import { strict->import; warnings->import; } 1; …

モジュールのソース読むときに大変なこと

use baseとか$self->next::methodとかしてて、あっちこっち見に行かなきゃならなくて、見て回ってるうちに何見てたか忘れるっていう

catalystでMVCでモデル分離オレオレまとめ

出来の悪い人がCatalystでモデル分離を勉強した仮まとめ。 嘘、大げさ、紛らわしいことが入り乱れてます。 何故皆モデルをコントローラから分離しろ、コントローラにロジックを書くなと言うのか catalystではコントローラで$cが使えるが、これはuriリクエス…

オーバーロードとかCORE::GLOBALとか

最初はオーバーロードが分からなかったから試してた。 そのうち変なことをし始めた。 オーバーロード編 % perl -le 'use overload q{""} => sub {die};$x = bless {}; print $x' Died at -e line 1. % perl -le 'use overload q{""} => sub {1};$x = bless {…

クロージャを使うとき

クロージャについて理解した。要は機能の足りないオブジェクト。perl以外ではそうなのか知らんけど。 どこで使うのか、っていうのはコールバックするときしか知らないし思いつかない。

モダンPerl入門の脱字

読むだけ読んで実際に実行してなかったところをやってたらxsのところでエラーった。 30分悩んだ。 % make Double.c: In function `XS_Double_calc_double': Double.c:33: error: called object is not a function make: *** [Double.o] Error 1こんなエラー…

今更ながらClass:C3

いつの話題だよって感じだけど。 フィーリングでしか使ってなかったので、ちゃんと勉強。 ヽ( ・∀・)ノ勉強終了。 教材:(Ab)?using Class::C3 - YAPC::Asia 2007 Tokyo Sessions インターネット万歳。 @ISAを変更 動画で触れてた動的@ISAの変更。 package Pa…

~0って何?

何か見たこと無いのが出た。 % perl -le 'print ~0' 4294967295 % perl -le '$hoge = ~0; print $hoge' 4294967295 % perl -le '$hoge = ~1; print $hoge' 4294967294 % perl -le '$hoge = ~2; print $hoge' 4294967293 % perl -le '$hoge = ~3; print $hoge…

perlとrubyのオブジェクト指向の比較

perl Parent.pm package Parent; use strict; use warnings; use base qw/Class::Accessor::Fast Class::Data::Inheritable/; use Data::Dumper; __PACKAGE__->mk_accessors(qw/name/); __PACKAGE__->mk_ro_accessors(qw/for_read/); __PACKAGE__->mk_wo_acc…

モダンPerl入門読んだ

モダンPerl入門を早速読んだ。 Test::MoreよりTest::Baseを取り上げるべきでは p184 正というか正確に言うと真では 「ある数字nが偶数だったら正を返す」 use strict; use warnings; sub is_even { my $n = shift; return $n % 2 == 0; } qrをrefしたらRegex…

ベンチマーク

備忘録。404 Blog Not Found:perl - $scalarの中身が数値か否かを判定する 実は、これが一番高速だったりします。 sub is_a_num { $_[0] != 0 } よし確かめてみよう。ネタを見つけたら試す俺子供 #!/usr/bin/env perl use strict; #use warnings; use Benchm…

Devel::REPLも便利

perlのインタラクティブシェルのperlsh便利ーって言ってたら、otsuneさんからDevel::REPLを教えてもらったので試した。 perlshはモジュール作者のデバッグツールとか聞いた。だからモジュール入れただけじゃperlsh使えるようにならないとか。 そんならソース…

perlshが便利

rubyでirbがあるんで、perlにもインタラクティブシェルあるだろーと思ったらperlshを見つけた。 使うまで # cpan cpan[1]> install Term::ReadLine::Gnuこのソースの中に含まれてるので手動コピー。どうせならWeb::Scraper入れたらscraper使えるようになるみ…

catalystで定数をどうやって持たせよう

catalystで定数の扱い方に悩む。簡単なのはuse constantだが、 package MyApp::Constant; use strict; use warnings; use base "Exporter"; our @EXPORT = qw/ SCA ARR HAS /; use constant SCA => 'hoge'; use constant ARR => qw/hoge huga foo bar/; use …

コマンドラインでperlを使う

たとえば、全ファイルからサブルーチン名を抜き出したいと思ったとき。 % grep sub * | perl -nle '/sub\s+(\w+)/ and print $1;' こういうことばっかりやってると、perlが無い環境にいったときに苦労する。 そんな環境滅んでしまえって気もするが。 % grep …

ソフトリファレンスはグローバル変数しか参照できません

Q.ソフトリファレンスで変数を参照してもundefって言われます A.ソフトリファレンスとか使うのが間違ってますソフトリファレンスが読み書き出来るのはグローバル変数だけです use strict; use warnings; use Data::Dumper; local $\ = "\n"; sub p ($) { pri…

memo

perldoc -f use perldoc subs

Catalystで何故か特殊変数$1と$2が最初から使われている

正規表現で処理してたら気がついた。何故かCatalystアプリの中では、何もせずともマッチ変数の$1と$2に値が入っている。 必要な部分だけ抜粋 use Data::Dumper; sub p {warn Dumper shift} sub auto :Private { my ( $self, $c ) = @_; p $1; p $&; p $`; p …

hide from PAUSEの意味

たまにこんなものを見かける。 package # hide from PAUSE DBIx::Class::CDBICompat::ColumnGroups; なんじゃこらと思ったら、こう書いたらCPANにクロールされなくなる、だそうな。

htmlエスケープされた文字列を戻す

use HTML::Entities; decode_entities $str;

perlでハッシュとかのカッコの前に付いてるプラスの意味

{}の前にプラスが付いて、+{}とかなってるのをよく見るけど、やっとこれの意味が分かったのでメモ。 このカッコはハッシュ以外にも使われるから、「これはハッシュリファレンスですよ」と明示するためのもの。 use strict; use warnings; use Data::Dumper; …

perlで重複無しの乱数を作る

List::Utilを使用。 use List::Util qw(first max maxstr min minstr reduce shuffle sum); @cards = shuffle 0..51 # 0..51 in a random order

dbicでバルクインサート

1個のデータを作るcreateを100回するより、100個のデータを作るcreateを1回の方が早い。 これをバルクインサートと言う、と。 んでdbicでやるわけで。 for (1..100) { my $length = int(rand(20)) + 1; my $str = String::Random->new->randpattern('.' x $l…

手抜きfunction

zshでほんの少しだけ楽をする俺専用function だって毎回perldoc -lとか打つのめどい # vi open perl file vip () { vi `perldoc -l $1 | perl -pe 's/pod$/pm/'` } # cd module dist cdp () { cd `perldoc -l $1 | perl -pe 's/[^\/]+\.\w+$//'` }

perlの型グロブとAUTOLOAD

とりあえずどちらもourを使え

Crypt::SSLeayを使う前にyumでperl-Crypt-SSLeayを入れよう

なんかcpanってこういうの多いな。 yum -y install perl-Crypt-SSLeay install Crypt::SSLeay