Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
356 lines (288 sloc) 19.8 KB

Perl入学式


Perl入学式について


Perl入学式とは

  • 2012年1月に大阪で開始された, プログラム初心者向けのPerl勉強会です.
  • 2013年度では東京, そして2014年度では福岡と, 3年目にして3大都市で開催!
    • 2015年度も昨年度と同じく東京, 大阪, 福岡の3都市で開催します.
  • 基本的に参加費無料で, 受講者の負担が極力少ない形で行われています.
  • 年6回のカリキュラム, 東京のみ, 同じカリキュラムを「補講」として開催します(どちらに参加されてもOK).

Perl入学式の使い方

  • 今流行のウェブアプリケーションを作ってみたいものの, 基礎から勉強したい人.
  • Perl以外の他の言語を学習することになったものの, 初心者を対象とした丁寧な勉強会が無いということでPerl入学式を利用してくださってもOKです.
  • 前年度までは, 他の言語を既に習熟した方がPerlを学習する際の補助的教材という位置付けで受講して下さった方もいらっしゃいました.
  • 皆さんの学びたい・作りたいをサポートします.

オンラインでのサポート

  • Perl入学式の公式ページ http://perl-entrance.org/
  • Twitterアカウント @PerlEntrance
    • 公式ページやTiwtterアカウントでは, 開催日程などがアナウンスされます.
  • Twitterハッシュタグ #Perl入学式
    • 運営側がウォッチしているので, なにか疑問があればこれをつけて気軽に質問してみましょう
  • GitHubのPerl入学式アカウント. 講義で使われたコードなどがあります.

Perlという言語について


Perlって何?

  • 1987年, Larry Wall(右写真)が開発したプログラミング言語です.

- Ruby, Python, PHPと並ぶLL言語(Lightweight Language)の一種になります. - C言語やsed(せど), awk(おーく)の影響を受けた動的型付け言語です. - 後のRubyやPHPに影響を与えました. - 「Perl」は言語そのもの, 「perl」はその処理系を示します.

Perlの特徴

  • Wikipediaの記事から重要なものだけ引用します...
    • 強力な文字列処理. 正規表現をサポート.
    • 日本語をはじめとして世界中の言語を処理可能.
    • 自由度の高い文法. 簡潔にプログラムを記述できる.
    • 高い後方互換性を持つ.
    • 数多くのオペレーティングシステムで利用可能.
    • プログラムの実行には事前コンパイルは不要.
    • 有志によって開発された豊富なモジュール.

TMTOWTDI

  • Perlのスローガン. 「ティムトゥーディー」と読みます.
    • "There's more than one way to do it."
    • 「やり方はひとつじゃない」.
  • Larryは「プログラミング言語は, いろんな対象をシンプルに記述する為にある程度複雑でなければならない」と信じています.
    • Perlは, 同じ意味を持つ処理をいろいろな書き方で表すことができます.
    • これについては, きっとこれからのPerl入学式のカリキュラムの中で体験することが出来ると思います.

高い後方互換性

  • Perlのバージョンアップによって昔のスクリプトが動かなくなる, ということはほとんどありません.
  • もちろん, Perlもバージョンアップによる細かい機能変更はあります.
    • しかし, 基本的な処理については後方互換性が相当繊細なまでに維持されています.

豊富なモジュール

  • CPANと呼ばれるアーカイブに, 全世界のPerl Mongerがモジュールを投稿しています.
    • Perl Monger ... Perl使いのこと. RubyにおけるRubyist, PythonにおけるPythonistaと同義です.
  • 例: Encode ... 文字列のエンコードを処理するモジュール.
  • 例: Net::Twitter ... TwitterのAPIを操作するモジュール.
  • 例: DBD::SQLite ... Perlから, SQLiteのデータベースを操作するモジュール.

Perl5 のバージョンの歴史

  • Perl4以前は前史として, 既に周囲に環境が存在しないと思って良いです.
  • Perl5.00x(xは数字)というバージョンでPerl5が登場しました. 1994年のことです.
  • Perl5.6が登場. 2000年. この頃からインターネットやウェブというものが徐々に一般に普及していきます.
  • Perl5.8が登場. 2002年. 国際化対応や今につながる様々な機能が搭載されます. 5.8時代が長かったため, 多くの企業等に長きにわたって使われ続けました.

Perl5 のバージョンの歴史

  • Perl5.10が登場. 2007年. 後方互換性を損ねない構文拡張等を行います.
  • Perl5.12が登場. 2010年.
  • Perl5.14が登場. 2011年.
  • Perl5.16が登場. 2012年.
  • Perl5.18が登場. 2013年.
  • Perl5.20が登場. 2014年. 現在の最新の安定版です. この講義もPerl5.20を使用します.

Perl5 のバージョンの歴史

  • 5.(偶数) が安定版. 5.(奇数) が開発版です.
  • 基本的に最新版の一つ手前の安定版までがサポート対象です.
  • Perl5.8時代が長かったので, 今もPerl5.8が生き残っている現場はあるものの, 今ならPerl5.10以降だけを考えれば良いです.
  • Perl5.10以降から5.20まで, Perl初学者にとって大きな違いはあまりありません.

余談: Perl6について

  • Perl5とは別に, Perl6も開発されています.
    • 当初はPerl5の後継となるはずだったが, 後に「Perl5とは別に開発を進める」と公式に発表されました.
    • よって, Perl5の開発は継続されます.
    • また, 現在ではPerl6はPerl5とは別の言語とみなされている, と解説されることもあるほど互換性はありません. これはPerl5のバージョン間での互換性が最大限に保たれていることの裏返しでもあります.
    • 現在の最新の安定版は5.20.2, バージョンを確認する perl -v では, Perl5のバージョン20, のように表記されています.

Perlのコミュニティ

  • 世界各地にPerl Monger(PM)のコミュニティが存在します.
    • 地域のPerl Mongrerコミュニティは, (地名).pmを名乗ることが多いです.
    • 日本でも, 十数個のコミュニティ, 勉強会が開催されています.

地域コミュニティ

  • pm.orgに登録されている, 公認のコミュニティ.
    • Hokkaido.pm, Kushiro.pm, Sendai.pm, Niigata.pm, Tokyo.pm, Shibuya.pm, Yokohama.pm, Kamakura.pm, Gotanda.pm, Nagoya.pm, Kansai.pm, Kyoto.pm, Fukuoka.pm
  • 非公認のコミュニティ
    • Hachioji.pm, Namba.pm, ...
  • 勉強会/イベント
    • Hokkaido.pm Casual, Perl Casual, Perl Beginners, Perl入学式, ...

YAPC::Asia Tokyo

  • YAPC ... Yet Another Perl Conference
    • 年に一度行われる, 日本最大規模のPerlの祭典です.
  • 今年は8月20日から22日の3日間開催です. YAPC::Asia Tokyo 2015.

PerlとCGI

  • 一時期, 「PerlでWebサービスを作るならCGI」という時代がありましたが, 今はそうではありません.
  • 最近は, PSGI(Perl Web Server Gateway Interface)という仕様に対応したWAF(Web Application Framework)を使っての開発が増えています.
    • 2014年現在, Perlの代表的かつ新規採用されやすいWAFとしては, MojoliciousやAmon2などがあります.
  • Perl入学式は「モダンなPerlを教える」という方針を取っていますので, CGIについては触れません.

より深く学ぶには?


勉強会への参加

  • pm.orgに登録されている, 公認のコミュニティ
    • Hokkaido.pm, Kushiro.pm, Sendai.pm, Niigata.pm, Tokyo.pm, Shibuya.pm, Yokohama.pm, Kamakura.pm, Gotanda.pm, Nagoya.pm, Kansai.pm, Kyoto.pm, Fukuoka.pm
  • 非公認のコミュニティ
    • Hachioji.pm, Chiba.pm, Kichijoji.pm ...
  • 勉強会/イベント
    • Hokkaido.pm Casual, Perl Casual, Perl Beginners, Perl入学式, ...

難しい内容かもしれないので不安

  • 参加するだけなら怖くありません.
  • 参加費も無料, もしくは会場費の割勘程度.
  • こんな世界もあるんだ〜程度に聴講すると, 数年後にふと繋がることもある.
  • 懇親会に参加して盛り上がると, さらに業界やPerl界隈の裏話が聴けたりも.

検索 vs 書籍

  • 最近は検索(ググる)ことで解決することも多い.
    • ただそれだと体系的な勉強は出来ないので, より深く学びたいのであれば何らかの書籍を通読するのがオススメ.
  • ネットの情報は玉石混交, 書籍の場合は情報の陳腐化があり得る
    • 最初は誰しも「記号」が分からないので, ググるにも手がかりが無い (perldoc -v / perldoc.jp を活用しましょう).

オススメの書籍

  • 「プログラミングPerl」(通称: ラクダ本). プログラミング未経験の初心者にはハードルが高い. 時期が来るまで買うのを待っても良い.
  • 「初めてのPerl」(通称: リャマ本). 若干プログラミング初心者向け. オライリーの文体に慣れていないと多少厳しいかも.
  • 「CPANモジュールガイド」CPANモジュールのガイド本. Perlの可能性を知るだけでも良書.
  • 「雅なPerl」2013年刊行. 同人誌, とはいえ初心者向けという意味ではかなり秀逸な解説をしている.
    • その他, 様々な対象者や内容の書籍がたくさんありますが, 割愛.

Perl環境の構築


システムPerlとユーザPerl

  • MacやLinuxなどの多くのシステムには最初からPerlが入っています。このPerlのことを システムPerl と呼ぶことがあります.
  • もちろんシステムPerlをそのまま使っても良いのですが、今後モジュールを入れたりする際にシステムPerlの環境を汚すことを避けるために、自分専用のPerl環境 ユーザPerl を構築することが最近の主流です
  • 今回はユーザPerl構築環境の一つ plenv を導入していきましょう

システムPerlは使わないの?

  • 最近のOSのシステムPerlのバージョンは新しいので、システムPerlで事足りる作業も多いです.
  • 実はこのPerl入学式でも第5回目くらいまではシステムPerlで事足ります.
  • ただ今後のことを考えてユーザPerlの構築を学んでいきましょう.
  • Lubuntuではaptによって、整合性のとれたシステムPerlへのPerlモジュール導入ができるので、aptで手に入るモジュールであれば、これでまかなうのもありでしょう.

plenvの導入準備

$ sudo apt-get update
$ sudo apt-get install git curl build-essential
  • Lubuntuでは初期状態にgitコマンドなどが入っていないのでapt-getで導入します
  • Macの場合は初期状態で入っているgitコマンドが使えます
    • MacでPerl環境を構築するためのその他のコマンドは、先ほどのXcodeで完了しています

plenvの導入

$ curl -L http://is.gd/plenvsetup | sh
  • ここでは, @ytnobody さんが作成した、plenv簡単導入プログラムを使います.

  • 上記のコマンドを打って下さい. しばらくかかるので気長に待ちましょう.

  • 終わったら、exit して端末を開き直すか、source ~/.bashrcを実行してシェルの設定を読み直してください。

  • plenv と打って、ヘルプが出たら成功です. which plenv などとして、plenv コマンドの場所を確認してみましょう.

  • 簡単インストールコマンド詳細を確認したい方は curl -L http://is.gd/plenvsetup | less など打ってみましょう.


plenvでのperlの導入

$ plenv install 5.20.2
  • 今回は2015年4月時点での最新の安定版 perl-5.20.2 を導入します.
  • これも時間がかかるので気長に待ちましょう.

plenvでのperlの導入

$ plenv versions 
* system (set by /home/username/.plenv/version)
  5.20.2
  • plenv versions で, 導入したPerl の一覧が見られます. * が付いているのが現在選択されているperlで, plenv 導入直前はシステムPerlが選択されているはずです.

plenvでのperlの導入

$ plenv global 5.20.2
$ plenv versions
  system
* 5.20.2 (set by /home/username/.plenv/version)
  • plenv global コマンドで, 使うperlを切り替えることができます.

現在有効なperlの確認

$ plenv version
$ 5.20.2 (set by /home/ogata/.plenv/version)
  • plenv version コマンドの他に、perl -v として実際にパスが通っている perl コマンドのバージョン情報を見るのが確実でしょう.

現在有効なperlの確認

$ perl -v
his is perl 5, version 20, subversion 2 (v5.20.2) built for darwin-2level
(以下略)
  • 今後は原則的に, plenvで作成したユーザPerlを使っていきます.

plenv その他

  • plenv global system と打つと, 現在のPerlをシステムPerlに戻すことができます.
  • plenv とだけ打つと, 使えるコマンドの一部の説明が出力されます.
  • 局所的な場所だけ違うバージョンのPerlを使う plenv local というものもありますが, 今回は plenv global だけ使います.

モジュールとCPAN

$ plenv install-cpanm
  • 複雑な処理などを肩代わりしてくれる外部プログラムであるモジュールがPerlには豊富に用意されています
  • PerlのモジュールはCPAN(シーパン)という場所に集められていて, 誰もが自由に使うことができます.
  • インストールはネットワーク経由で行うことができ, そのためのコマンドcpanmが用意されています.
  • 上記コマンドでplenvからcpanmを導入することが出来るので, やってみましょう.

モジュールを活用していこう

  • Perlには最初から搭載されて使用できるモジュールも存在して, コアモジュールと呼ばれます
  • cpanmコマンドを使って, CPANから外部モジュールを入れることも簡単にできます
  • 多くのモジュールを組み合わせて活用すれば, 様々な複雑な処理や自分一人では書ききれない処理を簡単に書くことができます.

ワンライナー

$ perl -E 'say "Hello World!";'
Hello World!
$ perl -E 'say 12+23;'
35
  • perl コマンドでは -e もしくは -E の後に直接プログラムを書いて実行することができます.
    • この他に -M オプションを使うことでモジュールを使う(use する)ことができます

ワンライナーとモジュール

$ perl -MTerm::ANSIColor -E 'say colored("Hello World!", "bold blue");'
  • Term::ANSIColor モジュールを使って文字を色付きで表示させてみましょう.
    • Term::ANSIColor はコアモジュールなので, どこでも使うことができます.

perldocとドキュメント

$ perldoc Term::ANSIColor
  • 使い方は perldoc Term::ANSIColor と打つと読めます (英語ですが). colored というサブルーチンが使えることがここでわかります.
  • モジュールには使い方のドキュメントがついていて、perldoc コマンドで読むことができます.
  • 実際にエディタを使ってPerlプログラムを書いていく際は, これらのモジュールを use を使って読み出します.

FizzBuzz問題とAcme

  • Acme::FizzBuzz というモジュールを使って, FizzBuzz問題を自動で解いてみましょう.
  • FizzBuzz問題とは, 数字が3で割り切れたらFizzを, 数字が5で割り切れたらBuzzを, 数字が3でも5でも割り切れたらFizzBuzzを, そうでなければ数字を出力するプログラムのことです.
  • Acme というのは, CPANにおいてジョークなモジュールの為に用意された名前空間です.
  • ルーニー・テューンズのロードランナーの中に出てくる, コヨーテに怪しい商品を売るAcme社から来ている... らしい.

モジュールをインストールしてみよう

$ cpanm Acme::FizzBuzz
$ perl -MAcme::FizzBuzz -E ''
  • インストールが完了したら、あとはこのモジュールを読み込むだけでFizzBuzz問題を解決してくれます.

PerlとモジュールとCPANの世界

  • CPANには, ジョークのようなモジュールから, ウェブプログラミングを支援するためのモジュール, TwitterやFacebookなどにアクセスして情報を取得するためのモジュールなど, ありとあらゆるものがあります.
  • あなたの趣味や仕事を助けてくれるモジュールがきっとあるはずです. CPANを検索して自分が必要な処理を肩代わりするモジュールを使うことができるレベルまで, まずは少しずつPerlを勉強していきましょう.

Hello, World!


最初のプログラム

  • どのプログラミング言語でも, 最初に解説されるのは「Hello, World! と表示するプログラム」であることが多いです.
  • というわけで, 先ほど構築したPerl環境を使って, Hello, World! を表示するPerlプログラムに挑戦してみましょう.
    • これは端末上に Hello, World! という文字列を表示するプログラムです.

Hello, world!

print "Hello, world!\n";
  • エディタにこのようなプログラムを書いて, hello.plという名前で保存しましょう.
    • Perlのスクリプトは.plという拡張子で保存することが多いです.
    • Sublime text2では, File -> Saveで保存できます.
  • printは, 端末に文字を出力する命令です.
    • \nは改行を意味します.
      • Macの日本語キーボードの場合, \はOption + キーで入力できます
  • 文の最後にはセミコロン(;)を付けましょう. 文の区切りという意味です.
    • C言語を知っている方は馴染み深いでしょう.

スクリプトの実行

$ perl hello.pl
hello, world!
  • perlの引数に, 実行したいスクリプトファイル名を与えると, そのスクリプトを実行してくれます.

練習問題

  • print命令を複数個使って, あなたのプロフィール(名前, 年齢, 大学etc...)を表示するスクリプトを書いてみよう.
    • スクリプトの名前はprofile.plとして, 実行してみましょう.
    • print命令を複数書く場合にはセミコロンで文を区切りましょう.
    • セミコロンの後に改行を入れて複数の行にして読みやすくするのが通常です.

練習問題

  • print 5-2; とすると3が表示されます(ダブルクォートはしません). では, 2015からあなたの生年の西暦を引き算して, 満年齢を表示してみましょう.
    • 改行を入れる場合, セミコロンで文を分けて, 次に print "\n" を書くなど, 色々試してみましょう (色々な方法があります).

お疲れさまでした