sironekotoroの日記

Perl で楽をしたい

すぐわかる オブジェクト指向 Perl 第1章 いきなりモジュールを使ってみる

いよいよPerlオブジェクト指向

  • さすがにPerl初心者本も狩り尽くしてきた感がある

    • 未読のPerl初心者本はまだまだたくさんあるのだけど、2000年以前の本など古いものが多い
    • それに何より飽きた
    • そろそろ自分で作ってる現世利益なプログラムに変革をもたらす、何かが欲しい!
    • OOPで書かれてるモジュール解読してみたい!
  • という事で、「続・はじめてのPerl」で???となったオブジェクト指向を学ぶべく次の本を手にしたのだった。

    • 2014年3月5日発行の第2版

  • でも、オブジェクト指向に期待をかけすぎるとツラいらしいんで淡々と、いつも通りやっていきまする

第1章 いきなりモジュールを使ってみる

  • 目次をみると、オブジェクト指向に至るまで結構長い
  • 復習がてらこなしていく
  • あせらず、じっくりねっとり行く
use File::Find;

find( \&fileproc, '.' );

sub fileproc {
    print "$File::Find::name\n";
}

  • この、わずか5行のプログラムから疑問を見つけ、掘り起こし、それを後の章で解説するという構成みたい

  • そして1章の後にあるコラムにうちの持ってる心配・疑問に関しての答えそのものがのっててビックリするなど。

    • 原価 + 消費税分 の元はこのコラムだけでとれた。
    • 知らない事があっても別に平気!

Perlマスターブック Perl5.6/5.8対応

今の自分にちょうど良い

  • 思いがけぬ残業で荒んだ気持ちで帰る途中、bookoffで見つけたのがこの本

  • Windows 環境からのインストール、変数、制御構造、サブルーチンなど一通り

  • さらにオブジェクト指向にも一章を割くなど
  • 初心者本からオブジェクト指向Perl本へ行こうとしていた自分にはちょうど良い
    • しかし、今日の夜にも次のPerl本がくるので駆け足で攻略!

かけあし

my @array = ('a'..'z');
# abcdefghijklmnopqrstuvwxyz

say @array[1,4];
# be

my @temp = (1,4);
say @array[@temp];
# be
  • うむ、つまり、配列のスライスに配列がとれる(という言い方で良いのかな?)
  • あと、連想配列のスライスをもっと自分のスクリプトで使ってみたいんだけど・・・使う事が出来るところはいっぱいありそうなのだけど

  • Chapter5: 制御構造

    • continue文ってどういう利用シーンがあるんだろ・・・想定できん・・・
  • Chapter6: リファレンス

    • ハードリファレンスって言い方は初めて見たかも
    • 無名配列、無名連想配列・・・かつては???だった
      • 配列としての名前はない(無名)けど、リファレンス名はある、と理解
  • Chapter7: ファイル操作、文字列操作、日付関数
  • Chapter8: サブルーチン、モジュール
  • Chapter9: 正規表現
  • Chapter10: 変数のスコープとシンボルテーブル
    • 型グロブ: 同じ名前を持つデータ構造を管理する形式
      • なるほど!
  • Chapter11: サブルーチン
  • Chapter12: パッケージとモジュール
    • use は BIGINサブルーチンと同じタイミング、メインスクリプトよりも先にロードと実行が行われる
    • require は メインスクリプトの読み込み時にロードと実行が行われる
    • use strict ではシンボリックリファレンスが禁止されている
      • この本の出版時で既に推奨されていない
      • なるほど、知らぬ間に use strict に救われていたんだなぁ
  • Chapter13: オブジェクト
    • オブジェクトとは、パッケージにひもづけられた・・・変数とサブルーチン・・・
    • ぷしゅー
    • とにかく、いろいろ作って、体得していこう
    • Universal クラスは組み込みで準備されている

かんたんPerl 第12章 モジュール入門/フォルダー処理、CGI

いよいよ最終章

  • CPAN は シーパン 読み派
  • File::Find つかってるけど、このモジュール、「続・はじめてのPerl」でも使ってたし、なにか定番というかお約束なのだろうか。

CGI

  • 大昔、CGIの本を手に取った事もあったんだけど、さっぱり分からなかった。
  • 何が分からないかというと、Perlでの処理の結果をどうApacheに渡すのか?あるいは逆ということ。
  • 表の HTML と裏で動いているプログラムが OS の環境変数使って値をやり取りしている、ということが理解できるようになるには、いろんな偶然が必要だったなぁ、と思う
    • Linux のサーバ運用の仕事に就いた、とか
  • というか、簡単なWeb掲示板を実現するにも、CGI/Perl , Apache , OS の知識が必要で、割とハードル高いんよね・・・

さて次は

  • 何の Perl 本にしようかなぁ

かんたんPerl 第11章 正規表現

おなじみ正規表現

  • とはいえ、全くしらなかったのがこれ
use 5.012;
use warnings;
use utf8;
binmode STDOUT, ':encoding(UTF-8)';

while(<DATA>){
    chomp;
    say $_ if /\d/;
}

__DATA__
1
2
3
0  #全角のゼロ
  • なんと、これ実行すると「0」も表示される。
  • まさか、全角の数字まで \d 文字クラスの数字にマッチするとは・・・
  • ただし、 utf-8 プラグマ利用時
    • これは、Unicodeの文字プロパティを使った文字クラスになるため。
    • /\d/a とすることで、半角数字にマッチ、とする事が出来る。

かんたんPerl 第8章 自作関数サブルーチン

ダイクストラ法!

適切な機能の切り出し方

  • サブルーチンについてはだいたい分かるのだけど、自作スクリプトにおける「適切な機能の切り出し方」ってのがイマイチで
  • 細かすぎても、おおざっぱすぎてもダメで、そういうあたりがプログラミングのセンスってやつなのかなぁと思ったり。

かんたんPerl 第6章 、第7章

かんたんPerl 第6章 枝分かれのifと真偽

いきなり首を縦に振りまくる事が書いてある

  • 200%同意する。

プログラミングは作業を自動化して人間を楽にするだけでなく、人間がやっていた仕事は実はどういう作業なのかを、分析して明らかにします。

  • 本当にその通りで、プログラミング学んでからは「仕事の無駄」とか、「業務フローの条件分岐」から外れようとする動きとか、敏感になった気がする。

    • というか、人間のやってる部分の仕事は業務フローに乗ってないパターンの判断だよなぁ・・・ちゃんとエラー処理を書いてれば人間(の仕事)いらなくなりそう。
    • 海外での ERP の使われ方は(実績のある)パッケージにあわせて業務フロー変えつつ ERP 導入するんだけど、日本の場合は現行の業務フローに ERP あわせようとして大爆死みたいな事を思い出したり。
  • モノを作り上げるため・楽をするため・あこがれから始めたプログラミングだったけど、これは本当に予期しなかった良い副作用。

閏年なら死ね!

  • (もしかして) レベル4デス ?
  • 条件分岐の定番は閏年判定だけど、「3のときだけアホになる」芸も定番だよなー
    • 芸とかギャグとかコントにも著作権あるんかな
    • FizzBuzz からプログラミング、というか Perl に興味持った事思い出した。

かんたんPerl 第7章 繰り返しと脱出

  • while で無限ループしてしまって強制停止を繰り返すマン登場!
  • お気に入りの制御構造は foreach です。無限ループしないから。

なるほど

  • 文字列検索の index で対象の文字があるかどうか、あれば何文字目か?で数字が返れば真、でsayが実行される、と。なるほど
  • うちだったら正規表現で /r/ とか書いてたけど、 index 使うのもシンプルで良いな。
    • というか、 index あまり使った事ない。
use strict;
use warnings;
use 5.010;

say "牡蠣の食べごろは";
my @month
    = qw /January February March April May June July August September October November December/;

foreach my $month (@month) {

    if ( index( $month, "r" ) > 0 ) {
        say $month;
    }
}

かんたんPerl 第5章 ハッシュとは何か

ぐだぐだ

  • メインで利用している Sublime Text2 から Terminal を呼び出せなくなっており、その設定をやり直したり何なりで午前中を費やす
  • そして直らない
  • うちは Perl の勉強がしたいのに、エディタの設定に振り回されている事に腹が立つー

ハッシュ

  • 何年前だろう、ハッシュの概念分からなくて、「別になくてもいいもーん」などと思ってた事を思い出す
    • 今となっては当時の自分が信じられない

ハッシュスライス

  • 配列のスライスは前回やったけど、ハッシュスライスって今までの初心者本にあったっけか・・・?

    • もちろん、自分が忘れているだけの可能性大いにあり
  • なるほど、配列のスライスは添字でとってくるけど、ハッシュスライスはキーでとってくると。

  • そして、ハッシュスライスは配列になるので、 % が @ になる、と。
    • 納得感ある
  • なお、以下のスクリプト、テキストでは「小の月」のハッシュスライスに December (12月)が入っているので、 November に直してある。
# month_hash3.pl -- 小の月をリスト出力する(ハッシュスライス使用)

use strict;
use warnings;
use 5.010;

my $name  = shift;
my %month = (
    "January"   => 1,
    "February"  => 2,
    "March"     => 3,
    "April"     => 4,
    "May"       => 5,
    "June"      => 6,
    "July"      => 7,
    "August"    => 8,
    "September" => 9,
    "October"   => 10,
    "November"  => 11,
    "December"  => 12,
);

my @shotr_month = @month{"February" , "April" , "June" , "September" , "November"};

say "小の月: @shotr_month" # 小の月: 2 4 6 9 11

ハッシュエントリの削除にdelete

  • 使った事なかった・・・なるほど。