たつをの ChangeLog : 2006-05-09

「続・初めてのPerl」のどこで何が説明されているかの自分用メモ。

続・初めてのPerl - Perlオブジェクト、リファレンス、モジュール


§2. 大規模なプログラムの作成

do → require → package
perl -V
perl -I/home/yto/...

§3. リファレンスの基礎

\@skipper
@{$items} _ @$items
$$items[1] _ $$items->[1]
$root->[2]->[1]->[0] _ $root->[2][1][0]
\%hash
$crew[0]->{'name'} _ $crew[0]{'name'}
@hash{qw(name position)}
@$hash_ref{qw(name position)} ハッシュスライス

§4. リファレンスとスコープ

リファレンスカウント
$reference_to_skipper = undef;
($ref->[-1])
my $array_ref = [ qw(a b c d e) ];
my $hash_ref = {a=>1, b=>2, c=>3};

§5. 複雑なデータ構造の操作

perl -d  ("s", "x \%hash")
Data::Dumper
$Data::Dumper::Purity = 1;
Storable
grep
map
map %hash = map {$_, 3 * $_} @input_numbers;

§6. サブルーチンのリファレンス

my $ref_to_greeter = \&skipper_greets;
&{$ref_to_greeter}("Gilligan")
&$ref_to_greeter("Gilligan")
$ref_to_greeter->("Gilligan")
$sub_ref = sub { ... }
File::Find でコールバック、クロージャの説明
sub create {my $count; return sub {print ++$count}}
{my $count; sub count_one {++$count}} count_one();

§7. リファレンスの実用的な使用方法

sort {$a <=> $b} @array
シュワルツ変換(Schwartzian Transform)
再帰的に定義されたデータ

§8. オブジェクトの基礎

Class->method(@args) _ Class::method("Class", @args)
@ISA
SUPER

§9. オブジェクトとデータ

(あとで)

§10. オブジェクトの破棄

(あとで)

§11. オブジェクトの高度な使用方法

(あとで)

§12. モジュールの使用方法

File::Basename
use File::Basename (); my $base = File::Basename::basename($path);
File::Spac
Math::BigInt
use lib "/home/yto/lib";
Exporter
@EXPORT, @EXPORT_OK
use CGI qw(param); my $f = param("foo");

§13. ディストリビューションの作成

h2xs -XAn Island::Plotting::Maps

§14. テスト

リグレッションテスト
Test::Harness
Test::Simple
Test::More
ok, cmp_ok, like, isa_ok, can_ok, TODO: { }

§15. CPANへの登録

Comprehensive Perl Archive Network
PAUSE (Perl Authors Upload Server) ID

追記:修正メモ。
$hash_ref{qw(name position)} → @$hash_ref{qw(name position)}

Perl の Storable モジュールでちょっとだけ複雑なデータを扱うときの自分用 SYNOPSIS。参考「続・初めての Perl[2006-05-09-1]

#!/usr/bin/perl
use strict;
use warnings;
use Storable qw(nstore retrieve);

my ($first, $second);

$first->{uhyo} = {
   'abc' => 123,
   'xyz' => 9,
};
$first->{hogera} = {
   'AAAAA' => [1, 2, 3],
   'ABCDEF' => [60,1],
   'W002' => [9, 1, 2],
};

test_print($first);

nstore [ $first->{uhyo}, $first->{hogera} ], "a.dat";

($second->{uhyo}, $second->{hogera}) = @{retrieve "a.dat"};

test_print($second);

sub test_print {
   my ($ref) = @_;
   while (my ($key, $value) = each %{$ref->{uhyo}}) {
       print "1: $key => $value\n";
   }
   while (my ($key, $value) = each %{$ref->{hogera}}) {
       print "2: $key => @$value\n";
   }
}

Storable で保存したデータって、作成したスクリプトがないと復元方法が分からなくて後から困るんだろうなあ、と思っていたけど、もちろんそんなことはなく、普通に読み込んで Data::Dumper で出力すれば良いだけだった (p.65)。
perl -MStorable -MData::Dumper -e 'print Dumper(retrieve shift)' a.dat


追記060511:
- 404 Blog Not Found:perl - 勝手に添削 - Storable
http://blog.livedoor.jp/dankogai/archives/50490051.html
Always use nstore and nfreeze instead of store and freeze.
常にnstoreとnfreezeを使う事。storeとfreezeではなく。
おお、なるほど! これでエンディアンで悩まされなくて済むわけですね。
ありがとうございます。これに基づき上のソースを変更しました。
変更した箇所のもとの記述は以下でした:
use Storable;
store [ $first->{uhyo}, $first->{hogera} ], "a.dat";

Academed!A | 第九回アカデメディア 『デジタルスタイル会議』へのお誘い
http://blog.academedia.jp/?eid=499341
「テクノロジーは生活をどう変えるか」をテーマに交流型会議イベントを
開催します。そして今回ご協力いただくのはソニーさんです。
というわけで、参加予定です。5月16日19:30から。
場所は丸の内の三菱ビルのコンファレンススクエア エムプラス。
(東京都千代田区丸の内2-5-2 三菱ビル 10F)

いつものことですが参加者は事前課題を提出する必要があります。
提出内容は後日、イベントのレポート記事にて。
ときは2007年。新しいカフェが始まり、大流行しました。モバイルユーザーに大人気のこのカフェにはデジタル生活を支援するための3つの仕掛けがありました。(1) 電源使い放題、(2) ネットつなぎ放題、に続く、三つめの仕掛けと、そのカフェの名前を教えてください。

Q1. モバイルユーザーに人気の三番目の特徴を教えてください。

Q2. そのカフェの名前を自由に考えてください。

(via http://blog.academedia.jp/?eid=499887)
この記事に言及しているこのブログ内の記事

たつをの ChangeLog
Powered by chalow