perl

Mojolicious を使ってみる

ものすごいドキュメントが充実してる。 Mojolicious - Perl real-time web framework とりあえずインストール $ cpanm Mojolicious Fetching http://search.cpan.org/CPAN/authors/id/K/KR/KRAIH/Mojolicious-1.12.tar.gz ... OK Configuring Mojolicious-1.…

perlbrew

メモ。前にcpanmとlocal::lib入れて、特に不便は感じてないけど、perlbrewも今更ながら試してみたい。 Kansai.pm#13で「Perl5環境構築」という話をしてきた - LAPISLAZULI HILL#Hatena とか参考にしてあとでやる。

オプション > コンフィグ > デフォルト値の優先順位で設定

メモ。 #! /opt/local/bin/perl use strict; use warnings; use Getopt::Long; use Config::Simple; my %option = ( hoge => '', ); Config::Simple->import_from("$ENV{HOME}/.testconfig" ,\%option); GetOptions( 'hoge=s' => \$option{hoge}, ); print <…

複数ファイルの共通行を抜き出す(または共通でない行を抜き出す)

(同じファイル内には同一行が無いのが前提)共通行を抜き出すだけだったら、ワンライナーでさくっと書ける。 $ perl -nl -e 'BEGIN{$c=scalar @ARGV}; $h{$_}++; END{ for (keys %h){print if $h{$_} == $c}; }' file1 file2 file3 ... BEGINブロック内でARGV…

perldoc-search のインストール

perldoc-search つかえば良い - 理系学生日記を見て、便利そうだったので入れることにした。 インストール $ cpanm App::Perldoc::Search 使い方 書式 perldoc-search <探したい文字列> <検索対象のディレクトリ> 例1:「perldoc-search」という文字列を含む…

cpanminus のインストール

※ 上記のエントリ「local::lib のインストール」を先に実施した miyagawa/cpanminus · GitHubの「INSTALLATION」の項を参考に実施。 手順 最新版をダウンロードする $ git clone git://github.com/miyagawa/cpanminus.git インストール $ cd cpanminus/ $ pe…

local::lib のインストール

local::lib - search.cpan.orgを参考に実施。 OSは「Mac OS X 10.5.8」。 手順 最新版をダウンロードする 上記CPANのドキュメントページの右側「Download:」の部分に最新版のダウンロードリンクがある。 $ wget <最新版> 展開 $ tar zxf local-lib-1.004009.…

JPerl Advent Calendar 2009

あとで読む http://perl-users.jp/articles/advent-calendar/2009/

MacOS XにPlaggerインストール

使えるまでのおおまかな流れとしては、Plaggerの動作に必要なPerlモジュールをインストール → svnから最新のPlaggerをチェックアウト → 設定 → 利用可能。といった感じ。 インストール 1回目失敗 cpan[9]> install Plagger ... Test Summary Report --------…

Perlモジュールをパスを検索

※ 2010/03/06 追記: 普通に「perldoc -l 」で調べられた。。。。今迄知らなかった…。 いつもPerlモジュールのコードを読むときは「perldoc -m モジュール名」としているが、モジュールのパスだけ知りたいときもある。 そんなときのために簡単なコードを書い…

ワンライナーで同時に2つ以上のファイルを開きたい

openを使わないでできたらたまに便利だなと思ったのでメモ。 イメージはこんな感じ。 file1とfile2の各行がそれぞれ$Var1と$Var2に入ってループする $ perl -wnl -e 'print $Var1 - $Var2;' file1 file2 後で調べる。

エラー処理の方法

仕事で他人(といっても先輩だけど…)の書いたコードを書き直すことがよくあるんだけど、 種類の違うエラーが全て1つのフラグ変数によって処理されてて、非常に読みにくかった。 雰囲気はこんな感じ # 汎用のエラー変数(変数名の意味は謎...) my $iErrFlg = 0;…

変数のスコープ

次のコード中で、関数 &a() の中から $global にアクセスできないと思ってた… 追記:読み返すとおかしなこと書いてるな…(というより、当たり前だろっていう…)、前から「思ってた」んじゃなくて、プログラム書いてる途中になぜかそう「思ってしまった」という…

perl のパラグラフモードをワンライナーで使う

Minimal Perl(原著) の p149 に載ってるパラグラフモード(-00 パラメータ)を使った例が便利そうだったので、基本的な使い方をメモ。 ~% perl -w -e 'for (1..100){ printf "%3s ", $_; print "\n" if $_%10 == 0; print "\n" if $_%20 == 0}' > one_to_h…

Minimal Perl

オライリーから翻訳版が発売されるらしい。 O'Reilly Japan - ミニマルPerl 実は今、原著の pdf版で読んでいるんだけど、一言で言うと、ワンライナーかわいいよワンライナーという感じの本。 具体的に言うと、grep, sed, awk, find などのコマンドの Perl版…

alias がどこで設定されてるか調べた

一つも alias を設定した覚えが無いのに、 % alias l.='ls -d .* --color=tty' ll='ls -l --color=tty' ls='ls --color=tty' run-help=man which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' which-command=whenceと、いくつ…

カレントディレクトリのファイル名に日付を含める

% perl -e 'while (<*>) {($file, $ext) = split(/\./, $_); rename($_, $file . `date +%Y%m%d` . ".$ext")}' colinux 上の Fedora7 から見ると大丈夫なんだけど、Windos2000 から見るとファイル名がわけ分からなくなってる。何でだろ?

ヒアドキュメント中の関数呼び出し

できるんだ…。知らなかったのでメモ。 ヒアドキュメント中の関数呼び出し - Perl表技集(via: Perlのヒアドキュメント内で関数を呼ぶ/楽) 以下引用。 print <

utf-8 のまとめ

Perl 弄ってるとたまに utf-8 関連の(自分にとって)謎の警告が出て悩むことがあるので、メモして後で読めるようにしておく。良さげなエントリを見かけたらその都度追加していくことにする。 Perl で utf-8 を扱う際に参考になりそうなページ Perl5.8でUTF-…

Perl で UTF-8(個人的メモ その2)

この前よく理解できなかった(参考:Perl で UTF-8 - 英語とプログラミング気まぐれ日記) UTF-8 についてまとめてくれてるエントリを見かけたのでメモ。 Perl5.8でUTF-8のメモ/楽

ファイルの共有ロックと排他ロック

CGIプログラミングの p.178 で謎の共有ロックなる用語が突然出てきたので調べてみた。 @ITの記事がわかり易かったので、自分用にメモ。 共有ロック(をかけたファイル):他のプロセスの読み込み(共有ロック)は許すけど、排他ロックは許さない 排他ロック…

local *FH; open FH, $filename; って何?

オライリーのCGIプログラミングを読んでいるのですが、 p309にで.. - 人力検索はてなが参考になったので、自分用にメモ。 要は、「my FH」とか「local FH」といったことができない(ベアワードを許さない)から「local *FH」と型グロブを使うしかないらしい…

Perl で UTF-8

オライリーの「CGIプログラミング 第2版」の p.172 に以下のような例が載っている(Embperl の利用例)のだけど、なぜか HTML のテーブル部分の日本語が文字化けして困った。 <html> <head> <title>Table Sample</title> </head> <body> <div align="center"> <h1>$row, $col の実験</h1> [- @sports = ( [ "ウインドサーフィン", "</div></body></html>…

Embperl のインストールメモ

CGIプログラミングの p.163 で紹介されてるモジュール。 なんかこのモジュール、日本語の情報が少ない気がする…。あまり使われてないのかな? cpan で楽々インストール。 % cpan HTML::Embperl インストールされたか確認するために use してみる。 % perl -M…

&split の動作

split /PATTERN/,EXPR の PATTERN の違いによる微妙な違いがよく分からなくて混乱してきたのでメモ。後でまた必要になったら読み返す。 % perl -de 0 DB<22> print join(' :', split(' ', ' hi there')) hi :there DB<23> print join(' :', split(/\s+/, ' h…

GDモジュールをインストール

perl から jpeg画像の大きさを一気に変換(縮小)したかったので、GDモジュールを入れることにした。 cpanコマンドでインストールしようとしたけど、「libgd」がどうたらで怒られてインストールできない。 % cpan install GD そこで、「gd-something」で探し…

あほきもちいい

「はてなダイアリー」で世界のナベアツ問題というのが紹介されてたのでやってみた。 #!/usr/bin/perl -w use strict; foreach (1..100) { print "$_: "; print "あほ" if $_ % 3 == 0 || m/3/; print "きもちいい" if $_ % 8 == 0; print "\n"; } FizzBuzz …

$CGI::DISABLE_UPLOADS ではまった

CGI.pm で「$DISABLE_UPLOADS = 1;」として、ファイルのアップロードを無効にしておいたのを忘れて、アップロードを行う CGI を実行しようとしていた。この状態で、 my $q = new CGI; my $file = $q->param('file') としても、「$q->param('file')」の戻り値…

文字列を print すると「Wide character in print at」と出力されて困った

以下のプログラム(参考:作って学ぶ、今どきのWebサービス: 第2回 RSSフィードの料理はLWPとXML::RSSにおまかせ)を実行したら、「Wide character in print at」というメッセージが print を実行する度に出力されてしまった。 #!/usr/local/bin/perl # http…

XML::RSS がインストールできなかった

% cpan XML::RSS が失敗してインストールできなかった。 そこで、google で検索してみると同じ悩みの人が既に解決してくれていたので助かった。 XML::Parserがインストールできなかったよ - urapico's diary どうやら、expat-devel っていうパッケージが足り…

=~ の構文を勘違いしてた

ラクダ本 p.167 によると、Perl の「=~」演算子は左側にスカラー式を、右側に指定された3つのクォート風の演算子 m//、s///、tr/// のどれかと結びつける。 だから、 my $string = "hoge"; print "match!\n" if m/hoge/ =~ $string; は間違いで、以下が正し…

my と local の話より do{}->() が分からなかった

my と local のサンプル - IT戦記を見ていろいろ試してみたけど、どうしても「do{}->()」の部分の挙動が分からなくてモヤモヤしていた。 そしたら、最高に分かり易いエントリを見つけたので、以下にメモしておく。ホントに感謝。 [Perl] my と local と our …

「foreach の $_ は local」、「while の $_ は global」な件について

追記(2007年12月28日(金)) 以下の内容には恐らく筆者の勘違いが含まれていると思うので、あんまり鵜呑みにしないでください。あと、ネタ元の id:fbisさんからコメントを頂いたのでそちらも参照してください。整理がついたら内容を随時訂正していく予定で…

Perl Cookbook 第2版が Googleブック検索で読める(追記:勘違いだった)

Perlクックブックソースコードリンク集(本家はこっち:Perl Cookbook)で第1版が公開されてるのは知ってたけど、Google検索で「perl cookbook」としたら第2版が丸々公開されててビビった。 追記 と思ったら自分の勘違いだった。実際は部分的にしか読めな…

CGI.pm の importメソッドの仕組みを見てみる

続・初めてのPerl p.202 を見て、 CGI.pm の import メソッドの仕組が気になったのでソースを読んでみることにする。 まずは、CGI.pm が置いてある場所を調べよう。 モジュールのパスを最初に調べて、 % perl -e 'print map "$_\n", @INC;' /usr/lib/perl5/s…

続・初めてのPerl 第13章 「オブジェクトのデストラクション」

練習問題の回答をメモ。 #!/usr/bin/perl use strict; use warnings; { package Animal; use Scalar::Util qw(weaken); use Carp qw(croak); sub speak { my $class = shift; print $class->name, ' goes ', $class->sound, "!\n"; } sub name { my $either …

Perl のハッシュリファレンスのスライスの書き方

Perl のハッシュリファレンスのスライスの書き方が分からなくてはまったので、やり方をメモしておく。 普通のハッシュ %foo のスライス % perl -le 'my %h = (a => 1, b => 2, c => 3); print @h{qw/a c/}' ハッシュリファレンスの場合 % perl -le 'my %h = …

続・初めてのPerl 第12章 「データのあるオブジェクト」

練習問題の回答をメモ。 #!/usr/bin/perl use strict; use warnings; { package Animal; use Carp; sub speak { my $class = shift; print $class->name, ' goes ', $class->sound, "!\n"; } sub name { my $either = shift; ref $either ? $either->{Name} …

続・初めてのPerl 第11章 「オブジェクト入門」

練習問題の回答をメモ。 ex11-1 #!/usr/bin/perl use strict; use warnings; { package Animal; sub speak { my $class = shift; print "a $class goes ", $class->sound, "!\n"; } } { package Cow; use base qw{Animal}; sub sound { 'moooo' } } { packag…

Perl で親クラスのメソッドを呼び出す方法

混乱しそうになったのでメモしておく。 結論的には、親クラスのメソッド呼び出しは 「細い矢印+SUPER」 を使おうねというだけの話。詳しくは、以下のソース中の コメントを参照。 { package LivingCreature; sub speak { my $class = shift; print "a $clas…

シュワルツ変換の実行効率

続・初めてのPerl の p.113 にシュワルツ変換というものが紹介されていた。 このシュワルツ変換を使うと、sort関数の間接指定内で割高な処理(比較的多くの時間やメモリがかかる処理)をするときに実行効率がよくなるらしい。 例えば、以下の「間接指定内で…

続・初めてのPerl 第8章 「ファイルハンドルへのリファレンス」

練習問題の回答をメモ。 ex08-1 #!/usr/bin/perl use strict; use warnings; use IO::Tee; my $choice; while (1) { print "1: File, 2: Scalar, 3: Both, q: quit\n"; print "Which of above do you want your output to go?: "; chomp($choice = <STDIN>); last i</stdin>…

続・初めてのPerl 第7章 「サブルーチンへのリファレンス」

練習問題の回答をメモ。今回は、かなりひどいプログラムを書いてしまったけど、自戒の念をこめてそのまま貼っておく。ヒントに書いてあった mtime を活用しないで、自力で mtime 相当のものを求めようとしているのがまずい。 #!/usr/bin/perl -w use strict;…

続・初めてのPerl 第5章 「リファレンスとスコープ」

練習問題の回答をメモ。 ex05-1 ハッシュを作るつもりでハッシュリファレンスを作ってしまっているのが問題。実行してみるまで気がつかなかった。 use warningsプラグマを常に使おう。 「% perldoc perldiag」で、Perl が生成する可能性のあるすべてのメッセ…

続・初めてのPerl 第3章 「モジュールの使い方」

練習問題の回答をメモ。 ex03-1 #!/usr/bin/perl use strict; use Cwd; use File::Spec; my $dir = "."; my @dir_files = glob "$dir/* $dir/.*"; my $cwd = getcwd; my @full_path_names = map File::Spec->catfile($cwd, $_), @dir_files; print map " $_\…

CPAN からモジュールをインストールする

「続・初めてのPerl 3章」の練習問題で、CPAN からモジュールをインストールする必要があったので、自分用に作業メモを残しておく。 基本的には以下のサイトを参考にさせて頂いた。 CPAN 初級 まず、自分の環境(colinux 上の Fedora7)には cpan shell(CPA…

続・初めてのPerl 第2章 「中級者の基礎知識」

「初めてのPerl」を一通り読み終えたので、「続・はじめてのPerl」を読み始めてみる。初めてのPerl の時と同じく、備忘録(+自分への戒め)として練習問題の回答をメモしていく。 ex02-1 #!/usr/bin/perl use strict; my @files = grep {-s $_ < 1000;} @AR…

初めてのPerl 第16章

練習問題の回答をメモ。 ex16-1 #!/usr/bin/perl use strict; my $pod_path = `perldoc -l perlfunc`; open POD, $pod_path or die "Cannot open $pod_path: $!"; # 上の2行は以下の1行で置き換えられる。while(<POD>) を while(<>) に変える必要あり。 # @ARGV =</pod>…

初めてのPerl 第14章

練習問題の回答をメモ。 ex14-1 #!/usr/bin/perl use strict; chdir "/" or die "Cannot chdir to /: $!"; exec "ls -l" or die "couldn't exec ls: $!"; ex14-2 #!/usr/bin/perl use strict; my $out_file = "ls.out"; my $err_file = "ls.err"; # ディレク…

初めてのPerl 第13章

練習問題の回答をメモ。 ex13-1 #!/usr/bin/perl use strict; unlink @ARGV; ## 何か問題があった時に、それをユーザに知らせる # foreach (@ARGV) { # unlink $_ or warn "Can't unlink '$_': $!, continuing...\n"; # } ex13-2 #!/usr/bin/perl use strict…