<   2013年 06月 ( 5 )   > この月の画像一覧
2013年06月15日の日記、「初めてのPerl」、え?なにか?w
[22:06]

どうもです。
ジメジメと暑い!

そんな暑い部屋で午後からずっとほとんどプログラミングしてますw
休みの日にどんだけーって感じです、我ながらw

で、現在タイトルどおり「初めてのPerl」で勉強しています。
昨日までは「すぐわかるオブジェクト指向Perl」で勉強してたんですけどね。。。
「すぐわかる・・・」で勉強してて、知らないことが出てくると不安感に襲われるんですよ。
なんかやっぱちゃんと勉強したいな、ということで「初めてのPerl」。

自分のことをこう言っちゃうの嫌なんですが、「不器用だな」と思います。
この業界は"ドンドン突き進む"のが現在のスタンダードなスタイルになってます。
そうしないと進化の激しい業界・技術についていけない、
言ってしまえば食っていけないんです。

でも僕はそういうのがイヤで。
仕事でも知らなくてもいいことまで首を突っ込んでしまう、よって仕事が増える、と非効率なことをしてます。
仕組みがわからないとやっぱ不安感がでてくるです。

だけども、Perlはプライベートなので、とことんやってみようと思いました。
そんな感じでこんな状態です。

c0050550_22273688.jpg

積んだ感じは壮観です。
オライリーの動物本なので表紙を見せたかったですが、Perl関連の書籍は積んだ厚さを見て欲しかったです。
(でもわからないですね。。。写真は難しい。。。)
ということで、タイトルなどを表示し、総ページ数を表示するプログラムを作ってみました。
ちなみに上から順番に読む感じです。
ちなみに僕は表紙をとって読む派です。


#! /usr/bin/perl

use strict;
use warnings;

my $books = [
{
name => '初めてのPerl 第6版',
nickname => 'リャマ本',
page => 488,
},
{
name => '続・初めてのPerl 改訂版',
nickname => 'アルパカ本',
page => 328,
},
{
name => '詳説 正規表現 第3版',
nickname => 'フクロウ本',
page => 528,
},
{
name => 'プログラミングPerl 第3版 VOLUME 1〉',
nickname => 'ラクダ本',
page => 756,
},
{
name => 'プログラミングPerl 第3版 VOLUME 2〉',
nickname => 'ラクダ本',
page => 680,
},
];

print "# My Perl Texts ###################################\n";

my $index = 0;
my $sum_of_pages = 0;

for my $book (@$books) {

$index++;

print "Book No.$index\n";
print " Name:${$book}{'name'}\n";
print " Nickname:${$book}{'nickname'}\n";
print " Page:${$book}{'page'}\n";

$sum_of_pages += ${$book}{'page'};

}

print "\nSum Of Pages=$sum_of_pages\n";

print "####################################################\n";



出力結果です!

# My Perl Texts ###################################
Book No.1
Name:初めてのPerl 第6版
Nickname:リャマ本
Page:488
Book No.2
Name:続・初めてのPerl 改訂版
Nickname:アルパカ本
Page:328
Book No.3
Name:詳説 正規表現 第3版
Nickname:フクロウ本
Page:528
Book No.4
Name:プログラミングPerl 第3版 VOLUME 1〉
Nickname:ラクダ本
Page:756
Book No.5
Name:プログラミングPerl 第3版 VOLUME 2〉
Nickname:ラクダ本
Page:680

Sum Of Pages=2780
####################################################

[PR]
by redchant | 2013-06-15 22:28 | 日記
2013年06月14日の日記、Perl - 二次元ハッシュ、ではなく;
今日は、Perlで二次元ハッシュ。
下記のデータでイメージしやすいかと。

[File]
perl_root=~/usr/bin/perl
tmp=/tmp
file1=file1.txt
file2=file2.txt
file3=file3.txt
[Internet]
web=http://www.xxx.co.jp/
ftp=ftp://www.xxx.co.jp/


ハッシュのイメージはこんな感じになります。

ハッシュ{'File'}{'perl_doc'} とすると ~/usr/bin/perl を取得
ハッシュ{'File'}{'tmp'} とすると /tmp を取得
ハッシュ{'Internet'}{'web'} とすると http://www.xxx.co.jp/ を取得

で、いやーハマったハマった笑
ハマったところは、具体的には言えません!
恥ずかしすぎて!
ハッシュでハマったわけでも、リファレンスでハマったわけでも、正規表現でハマったわけでもなく!
基本的なアルゴリズムを間違っちゃった(・∀・)

my %conf = ();
my $category = '';

while (<DATA>) {

my $data = $_;
chomp $data;

if ($data =~ /^\[(.*)\]$/) {
$category = $1;
} elsif ($data =~ /^(.*)=(.*)$/) {
$conf{$category}{$1} = $2;
}

}

for my $category (keys %conf) {
for my $key (keys %{$conf{$category}}) {
print "Category:{$category} Key:{$key} = $conf{$category}{$key}\n";
}
}

__DATA__
[File]
perl_root=~/usr/bin/perl
tmp=/tmp
file1=file1.txt
file2=file2.txt
file3=file3.txt
[Internet]
web=http://www.xxx.co.jp/
ftp=ftp://www.xxx.co.jp/


がんばろっ
[PR]
by redchant | 2013-06-15 00:12 | 日記
2013年06月10日の日記、Perl - リファレンスのみの2次元配列;
Perlのお勉強。
今日は、配列。
配列でも、リファレンスを使った「現場的な」配列。


#! /usr/bin/perl

use strict;
use warnings;

my $array = [
undef,
['Jan', 1],
['Feb', 2],
['Mar', 3],
['Apr', 4],
['May', 5],
['Jun', 6],
['Jul', 7],
];

print "no syntax sugar : ${$$array[4]}[0] is ${$$array[4]}[1]\n";
print " syntax sugar 1: $array->[4]->[0] is $array->[4]->[1]\n";
print " syntax sugar 2: $array->[4][0] is $array->[4][1]\n";

上記のコードのprint文は3つとも同じ変数展開をします。

no syntax sugar : Apr is 4
syntax sugar 1: Apr is 4
syntax sugar 2: Apr is 4

なんとも奇怪です。
3種類も書き方があるとは困ります。(もしかしてもっとある?)
たぶん読むのに困ります。
個人的には2番目の書き方が一番明瞭かと思います。

でもですねー、最初は -> 記法のデリファレンスのシンタックスシュガーは好きではなかったです。
原始的なデリファレンスの方が分かりやすいと思ったです。
でも、それは1次元配列まででした;
リファレンスのみの2次元配列は、原始的なデリファレンスでは、まだちょっと理解できません。
まだブレース(波括弧({}))の役割が分かってないなあ。

${${${$array[4]}}[0]}

もっともっとデリファレンスして、これでもいけると思ったのだがエラーになる。
わからん。


ところで、Vimの使い心地がいいです!
普通のエディタを操作している時も、Vimのコマンドを打ってしまいます;
それはそれで問題ですが。。。
[PR]
by redchant | 2013-06-10 23:17 | 日記
2013年06月09日の日記、Vim使いになる!
エディタ選びを悩みに悩んで、とうとう「Vim」を使っていこうかな、と思っています。
WindowsからMacに移行してからは、「mi」から「Sublime Text2」を使ってました。
でも、やっぱ、プログラマは「Vim」か「Emacs」を使った方がカッコイイ(・∀・)
ということで!

ということで、「Vim」です!

まず、「Vim」を説明しておこうかと。
読み方は「ブイアイエム」(ビムと読む人もいるらしいが)です。
UNIX系OSのデフォルトで付いているエディタの「vi」の超機能追加版です。
で、「Vim」も現在となってはUNIX系OSにデフォで付いているっぽいです。

MacもUNIX系OSのひとつですから付いてるそうです。
「付いてるそうです」というのは、確認する前に、日本人MacユーザのVimのデファクトスタンダードである、
MacVim-KaoriYaをインストールしてしまったからです!
なんだよ、標準添付を使用するんじゃなくて、わざわざインストールすんのかよって感じですか?
でも、後ほど、すごいことに気付くことになると思います。

「MacVim + 香り屋さんのパッチ + なるべく日本語化 = 香り屋さんのWindows版の使い勝手に近いMacVim 」を勝手に目指すプロジェクト
http://code.google.com/p/macvim-kaoriya/

さて、初めて触る人は、かなり難しく感じると思います。
僕は、仕事で少しだけ「vi」を使ったことがあったので、少し入りやすかったです。
なにが難しいって、マウスを使いませんから!(僕の場合ノートPCなのでタッチパッドですが)
Vimは全てキーボードで完結します。
カーソル移動が、なんと、
j :下へ
k :上へ
h :左へ
l :右へ
です!
なんで!? と思いますが、この割当てだと右手のみで移動できます。
(でも、矢印キーでも可能です。僕もたぶん矢印キーを使いそうな気がします orz)
キーボードのみで完結するのは逆にマウスに手を移動する時間を減らせるということです。
キーボードだけで何ができるの? という疑問も浮かぶでしょう。
それができるんです!
すべて!
例えば検索処理はノーマルモードで、

/検索したい値

するだけです。
まあ、これだけでは、どんな恵みがあるかは感じられないかもしれませんが、あらゆることがパパっとできてしまうのです!

さて、そんな初心者は、なにから入ればいいかというと、「Vim」には「vimtutor」というレッスンが付いてます。
で、ここで重要なのが、MacVim-KaoriYaをインストールしたということです。
なんと「vimtutor」が日本語訳されています。見事に。ここ重要!
たぶん英語だったら使うことにはならなかったでしょう。
一旦コマンドや操作方法を覚えてしまえば、英語版の「Vim」でも怖くありません。(きっと)
そんなエディタなんです!
ちなみに、「vimtutor」を実行すると冒頭に、「レッスンを終えるには25分から30分くらいかかります」と書いてありますが、「vi」経験者の僕でも1時間くらいかかりました。
「vi」未経験者の方は2時間くらいかかりかもしれません。
それでも是非最後までやって欲しい。たった2時間と思えるはず。それだけの享受を受けられます!

でも、当エントリは「Vim」で書いたのですが、日本字入力する場合は、ちょっとめんどかったです。
編集モード→[Command+SPACE]で日本字入力モードに→ブログ内容書いて→ノーマルモード→[Command+SPACE]で英字入力モードに→移動とかコマンド打ったりとか。
初稿は「Sublime Text2」などで書いた方がいいかもです。
その後の編集やプログラミングは「Vim」が良いですと思いました。
慣れだけかも知れないですけど。

とにかくマスターしてやりますよ、Vim!
[PR]
by redchant | 2013-06-09 19:59 | 日記
2013年06月02日の日記、正規表現を一旦終えるの巻
Perlは文法を少し知っていたので、いきなり「すぐわかる オブジェクト指向 Perl」という本で勉強してました。
そしたら、少し進んだら「前著で散々やりました正規表現」(深沢千尋さん著)のような記述が出て来ました。

Perlを勉強しようとした理由は自分にもよく分からないのです。
でも「正規表現をマスターしたい」というのは前から夢のように思っていました。
Perlといったら正規表現でしょう。これ間違いない。
そう、「Perlを勉強したい」と「正規表現をマスターしたい」、

Matchしました!

ということで、正規表現のお勉強を始めたとさ。

深沢千尋さんの前著「すぐわかるPerl」は、少々古い本でして絶版なのかAmazonで新品はありませんでした。
出版社にも無かったです。
ということで、著名な結城浩先生の「新版Perl言語プログラミングレッスン入門編」で正規表現を勉強し始めました。
この本なぜか持ってました(^^;
Perlの文法を少し知っていたのもこの本を読んだからかな。たぶんかつての自分は挫折したのでしょうw
この本、なんと正規表現について2章も割いているんです。
わかりやすい結城先生の本なので頑張りました。

最後の方の、「正規表現のループ展開」や「HTMLの解析」や「CSVの解析」は難しくまだ完全に理解はできてないのです。
でも、基本はできたと思うので、結城先生の本はなんとか仮免許ということで。

今では、あんなに味気なかった正規表現も、おもしろく感じるようになりました。
いつかはオライリーの5,040円の528ページの「詳説 正規表現」も読みたいと思います。

※それでも正規表現のリファレンス本みたいな本はとりあえず買っておきました。
[PR]
by redchant | 2013-06-02 22:08 | 日記