2007-01-01から1年間の記事一覧

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

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

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

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

[perl] 続・初めてのPerl 第16章 「ディストリビューションの書き方」

練習問題の回答をメモ。 今回は、ディストリビューションの作成手順なので、順を追って書いていく。12章の AnimalクラスとHorseクラスのディストリビューションの作成方法はほぼ同じなので、以降は Animalクラスについてのみ手順を書くことにする。 まずは、…

Googleブック検索とアマゾンの検索結果が同時に見れたら

便利かもしれない。Perlで作れないかな。

[perl] 続・初めてのPerl 第15章 「Exporter」

練習問題の回答をメモ。 ex15-1(pmファイル) package Oogaboogoo; use strict; use warnings; use base qw(Exporter); our @EXPORT = qw(number_to_day_name number_to_month_name); my @day = qw(ark dip wap sen pop sep kir); sub number_to_day_name {…

[perl] 続・初めてのPerl 第14章 「オブジェクトに関する高度なトピックス」

練習問題の回答をメモ。…したいところだったけど、全然思いつかなくて答えを見てしまった。一応、答えをそのまま載せておく。 ex14-1 #!/usr/bin/perl use strict; use warnings; { package MyDate; use vars qw($AUTOLOAD); # our $AUTOLOAD と同じ(ラクダ…

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] Perl でクラス変数を作る方法

続・初めてのPerl を読んでいて少し混乱したので、クラス変数の作り方をメモしておく。 結論から言うと、Perl でクラス変数を作るには「our演算子」を使う。ラクダ本 p.156 によると、our変数は、 ourは値を生成するのではなく、グローバル変数(これは永遠…

続・初めての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] 続・初めてのPerl 第10章 「大規模なプログラムの構築」

練習問題の回答をメモ。 ex10-1 package Oogaboogoo; use strict; use warnings; my @day = qw(ark dip wap sen pop sep kir); sub number_to_day_name { my $num = shift @_; die "Input number must be between 0 and 6!: $!" if $num < 0 || $num > 6; $d…

[perl] 続・初めてのPerl 第9章 「リファレンスを使った実践的なテクニック」

練習問題の回答をメモ。 ex09-1 #!/usr/bin/perl use strict; use warnings; #my @sorted = sort { -s $a <=> -s $b } glob "/bin/*"; #print "$_\n" foreach @sorted; my @sorted_schwartz = map $_->[0], sort{ $a->[1] <=> $b->[1] } map [ $_, -s $_ ], …

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

続・初めての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] 続・初めてのPerl 第6章 「複雑なデータ構造の操作」

練習問題の回答をメモ。 ex06-1 #!/usr/bin/perl use strict; use warnings; use Storable; my $all = "**all machines**"; my $log_data_name = 'log_data'; my %total_bytes; # 保存しておいた %total_bytes をロードする。ハッシュリファレンスをデリファ…

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

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

[perl] 続・初めてのPerl 第4章 「リファレンス入門」

練習問題の回答をメモ。 ex04-2 #!/usr/bin/perl use strict; my @gilligan = qw(red_shirt hat lucky_socks water_bottle); my @skipper = qw(blue_shirt hat jacket preserver sunscreen); my @professor = qw(sunscreen water_bottle slide_rule batterie…

続・初めての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] はじめての Perl 第17章

練習問題の回答をメモ。 ex17-1 #!/usr/bin/perl use strict; my $filename = "sample_text"; open FILE, $filename or die "cannot open '$filename': $!"; my @lines = <FILE>; while (1) { print "Enter a search pattern: "; chomp(my $pattern = <STDIN>); last if $</stdin></file>…

おすすめの英文法の参考書

たまには英語ネタも書いてみよう。今回は(前回ってあったかな…)、英文法の参考書を紹介してみる。たぶん、自分が紹介するより、amazon のレビューを見てもらったほうが早いから、リンクを張っておくよ。 Grammar in Use Intermediate with Answers: Self-s…

初めての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] 初めてのPerl 第15章

練習問題の回答をメモ。 ex15-1 #!/usr/bin/perl my @numbers = qw( 17 1000 04 1.50 3.14159 -10 1.5 4 2001 90210 666 ); my @sorted_numbers = sort {$a <=> $b} @numbers; printf "%20s\n", $_ foreach (@sorted_numbers); %s だと文字列として扱われる…

初めての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…