大学で行ったPerl講習会の報告
井上 謙次
大阪工業大学
発端
- 2006年1月21日 Kansai.pm 新年会
- 大学で教えられていることが話題に
- Perl の授業はないんだよなぁ...
- よし,なんか企画してみよう
目的
3つ:
- 世界レベルで活躍できるソフトウェア技術者の育成
- うちの学校(大阪工業大学 情報科学部)でやっていないこと
- Perl を使う
企画
- 題名: Routine Automation and Text Processing
- 趣旨:
- 処理の自動化 と
- テキスト処理 について
- Perl を使って学ぼう
- 英語ベースの講習会
- 1日4時間~5時間×6日
- 3月1日~3月9日まで
- 募集と開催: 学内(大阪工業大学 枚方キャンパス)
講習内容(スケジュール)前半
- 処理の自動化
- バッチプログラミング
- シェルスクリプト
- cygwin
- バージョン管理システム: CVS と Subversion
- Perl プログラミング I
- 構文,演算子,関数
- データ構造,変数,スカラー値,リスト(配列),ハッシュ
- Perl プログラミング II
- Perl モジュール
- ファイル I/O
- エンコーディング
講習内容(スケジュール)後半
- テキスト処理
- Web プログラミング I
- Web プログラミング II
実際にやってみた
- 参加者: 5名
- 学部3名(2年,3年,4年),修士1名,博士1名
- 全員 Windows XP を使用
- 参加者が少ない→英語の壁?
- 講習方法
- ホワイトボードで説明
- 必要があればプロジェクタ
- プログラミングは講師がタイプしたプログラムをそのまま受講者も入力して実行してみる形式
→入門としてはOK。ただし自分で考える演習が不十分。時間が少ないため仕方ない?
- 実際にできたこと...
1日目: Windows バッチプログラミング (1)
- Course description
- My activity introduction
- Mozilla Firefox Extension: PageZoom
- Introduced a Perl build script
- Compiling Mozilla Firefox demo
- perldocjp: using version control system
- cygwin
- Brief description
- Installed cygwin
# 処理(作業)の自動化について説明。
1日目: Windows バッチプログラミング (2)
- Version control systems
- Brief description
- Installed TortoiseSVN
- Performed checkout, add, commit and update
- Windows batch programming
- Commandline arguments
- Variables
- Statements: if, if exist, goto, for and rem
- Commands: echo and type
- 演習: コマンドライン引数で与えられたファイルの中身を全て表示するバッチプログラムの作成。
# Windows バッチプログラミングと TortoiseSVN で Subversion を使ってみる。
2日目: シェルとシェルスクリプト (1)
- Referring previous lecture
- Batch programming: audio normalization
- Description on Unix and shell
- Standard output, input and error
- Redirection and pipe
- Environment variables: HOME, CYGWIN and PATH
- Permission (executable bit and chmod)
# Unix の基礎とシェルの役割。
2日目: シェルとシェルスクリプト (2)
- Shell scripts
- Reference: シェルスクリプト(Bash)入門
- Variables
- Commandline variables
- expr
- if, case, for and while
- File test operators: -d and -f
- Numeric operators: -le and others
- Example scripts: init.d script and mktarball (of PageZoom)
- Brief introduction on Perl
# シェルスクリプトの書き方。
3日目: Perl プログラミング I (1)
- 「初めての Perl 第2版」をベースに説明(特に「1章 Perl 入門」のチュートリアル)
- Hello, world!
- Shebang and executable bit
- print and print(), string constants, \n
- Comment
- Input your name
- Scalar variable
- Data input (diamond operator) and chomp
- use strict and use warnings
- use strict: raises compile errors
- my: variable declaration
- use warnings: raises runtime warnings
# チュートリアル1日目。
3日目: Perl プログラミング I (2)
- Let's create a user login prompt (user authentication)
- if: ユーザ名を if-elsif-else で比較
- if, elsif, else
- eq: comparison operator
- exit and exit code
- Array: ユーザ名を配列内で探索
- Array and qw operator
- for, foreach, next and last
- Hash: ユーザ名-パスワード対をハッシュで探索
3日目: Perl プログラミング I (3)
- Open/close files: ファイルからユーザ名-パスワード対を読み込む
- open, close and filehandle
- Logical or and die
- undef (undefined)
- split
- Scalar and list contexts
- tr
- Line endings (newlines)
4日目: Perl プログラミング II (1)
- Subversion の仕組み
- Copy-modify-commit (not copy-modify-merge)
- Repository and working copies
- Create accounts
- Commandline arguments: @ARGV
- shift
- Write (append mode)
- Line endian conversion
- Windows と cygwin Perl との間で問題発生 - Perl スクリプトの一例
- rename
# チュートリアル2日目。
4日目: Perl プログラミング II (2)
- Users list
- push
- keys and algorithm of hash (O(1) and keys' order)
- sort and cmp
- Security: MD5'ed password
- Digest::MD5 (Perl module): md5_hex
- Functions
- Interpreter-based and compiler-based
- Perl reads file, compiles it to (something like) byte codes, and runs it (like Java)
5日目: Perl プログラミング III とテキスト処理 (1)
- Literals, strings ("" and '') and variable interpolation
- Operators: numeric, string and precedence
- Auto conversion (between numbers and strings)
- Variable operators: undef, assignment, binary assignments, autoincrement and autodecrement
- List and array
- List literals
- Slice, out of index (auto expansion)
- Stack (push and pop) and queue (push/shift or unshift/pop)
- localtime(time): scalar and list contexts
- reverse
# 前半 = Perl の詳細,後半 = テキスト処理。
5日目: Perl プログラミング III とテキスト処理 (2)
- Hash
- Literal representation: same as list
- keys, values, each and delete
- Hash slice: print "@hash{@array}"
- Control structures
- Statement block and scopes
- if/elsif/else and unless
- False (0, "", undef) and true (others)
- while, until, for, foreach, next, last, redo and labels
- if and unless modifiers
- and, or, &&, ||
5日目: Perl プログラミング III とテキスト処理 (3)
- An email and regex
- メールからヘッダ部分やFrom:のメールアドレスを取り出す
- Regex: ^ and $, character class, * and +, grouping and alternation, ., \w and \d
- i option (ignore case)
- Automaton: backtracking ('greedy' matching)
- Word occurrences
- Text: Alice in the Wonderland
- Hash counts
- Regex in split(), lc()
- \s and \W
- 単語の頻度分布: sort -> gnuplot
6日目: Web プログラミング (1)
- Web Architecture and HTML
- HTTP: request and response
- Client side: XHTML, CSS and JavaScript
- Server side: Java Servlet, CGI, Apache Modules
- XHTML 1.0 Strict: html, head, title, body, h1 and p
- Encoding: UTF-8 and UTF-16
- CSS
6日目: Web プログラミング (2)
- Web programming (CGI)
- Installing Windows port of Apache2
- List current directory
- opendir, readdir and closedir
- HTML: ul and li
- HTTP header: content-type
- join and map
- qq{...} operator
- Here document
- Form
- form, input (text and submit types), label and br
- use CGI, use CGI::Carp qw(fatalsToBrowser)
- Arrow operator (->) and OOP
- Full text search engine (demo)
感想
- 参加者のほとんどが英語を十分理解できた
- ただしゆっくり話しているため言葉で伝えられている量は少ない
- 事前準備が当日のみで不十分(反省)
- テキスト処理が十分に教えられなかった(時間配分の失敗),特に:
- 日本語(日本語のテキスト)処理
- エンコーディングや文字コード周り
- Perl を覚えるための足がかりにはなったようだ
大学教育
- 日本のソフトウェア産業
- 世界レベルのソフトウェア技術者の人材育成
- 理論が分かってプログラムが書けてシステムが組める
- 英語が使える
- 自動化システムが実際に組める→もう少し焦点を?
- 長期休暇期間中の授業(うちの大学の問題)
- 大学とコミュニティ活動の連携?
おわり
ご清聴ありがとうございました
なお,このスライドはS5 <http://www.meyerweb.com/eric/tools/s5/> を用いて作られています。