Skip to content

Instantly share code, notes, and snippets.

@note103
Created December 25, 2013 15:30
Show Gist options
  • Select an option

  • Save note103/8124222 to your computer and use it in GitHub Desktop.

Select an option

Save note103/8124222 to your computer and use it in GitHub Desktop.
PerlBeginners.pm 2013/12/26
#!/usr/bin/env perl
use strict;
use warnings;
package PerlBeginners {
sub perllevel {
my $level = shift;
if ($level == 1) {
print "レベル1: Perl 関係の書籍や資料を何も読んでいない。Perl がプログラミング言語だということは知っているが、それ以外のことは何も知らない。他人の書いたPerl プログラムを実行できるので、プログラムの一部を編集することでプログラムの動作の一部(出力される文字列の内容など)を変更できることを知っている。プログラムのほかの部分に変更を加えてもなぜうまくいかないのか理解していない。この言語に合うメンタルモデルを持っていないので、Perl の構文をCOBOL とC++ のような他の言語のものとは区別できていない。\n";
} elsif ($level == 2) {
print "レベル2: 基本ブロック構造の構文を理解しているが、JavaScript のような言語に似ているという程度の認識にとどまっている。ブロックがある種のスコープ効果を生じさせるという理解はあるものの、レキシカル変数のことは知らないし、use strict や use warnings に出会ったこともない。条件の意味を変更することができ、基本的な算術演算子と論理演算子条件を使用できる。必要とするすべてのことを、他人の書いたプログラムに若干の変更を加えることで達成できると思っている。\n";
} elsif ($level == 3) {
print "レベル3: プログラムをゼロから作成したいが、ある種の教育が必要だとわかっている。Perl を学ぶのに適した書籍を推薦して欲しいと思っている。このレベルのプログラマの中には、ラクダ本[WALL00] をチュートリアルだと思って手に入れ、その内容を読破しようとして、重いトラウマに苦しむ者がいるかもしれない。\n";
} elsif ($level == 4) {
print "レベル4: use strict とuse warnings を初めて学び、有用性よりも厄介さを感じている。my の意味について思案している。いろいろなモジュールでほとんどの問題を解決できることは知っているが、それらの入手方法や使用方法は知らない。Perlのニュースグループに参加しているが、自分に関係のないトピックについての大量の議論に圧倒されている。\n";
} elsif ($level == 5) {
print "レベル5: 正規表現、演算子、I/O、およびスコープについて基本的な理解がある。皆が言っているので、my、use strict、およびuse warnings を使用している。多くの人たちがこのレベルを超えないのは、たとえ非効率であっても、再利用可能なコンポーネントの作成を除けば、ほどんど何でもできるからである。このレベルか次のレベルでは、リファレンスのことを知っている。\n";
} elsif ($level == 6) {
print "レベル6: Perl の講習を受けている人もいる。オブジェクトの使い方を知っており、この知識とComprehensive Perl Archive Network(CPAN)を利用すれば強力なプログラムをすばやく作成できると知っている。次のレベルに進んで、この能力拡大がどこまで行くのか見たいと思っている。\n";
} elsif ($level == 7) {
print "レベル7: オブジェクト指向モジュールを自分で作成できるようになり、コードを再利用することの喜びをようやく感じている。パッケージならびにレキシカル変数とダイナミック変数の違いを理解している。Perl の正規表現(regular expressions)が「普通の」という意味のレギュラーではなく、単純なテキスト操作をはるかに超えるものだと知っている。\n";
} elsif ($level == 8) {
print "レベル8: CPAN にバグレポートやパッチやモジュールを送ったり、ドキュメントについて提案したり、初心者に助け舟を出したりするなど、Perl コミュニティに寄与するための活動を開始している。AUTOLOAD などの高度な機能を知り、Class::MethodMaker などの開発者向けモジュールを使い始める。DBI やTk などの複雑なアプリケーションモジュールを適宜使用する。CGI.pm を駆使してWeb ベースのアプリケーションを作成する。\n";
} elsif ($level == 9) {
print "レベル9: Perl カンファレンスに出席するなど、Perl コミュニティへの関与を深める。www.perlmonks.org や#perl(第12 章を参照)に頻繁にアクセスしているかもしれない。eval でコードをその場で作成したり、シンボルテーブルを操作するといったことを楽に行える。コーディングにおいて、たびたびパフォーマンスのことに気を遣う(たぶん必要以上に)。メジャーなモジュールをサブクラス化して重要な機能をつけ加えたモジュールを公開する。\n";
} elsif ($level == 10) {
print "レベル10: Perl のobfuscation コンテストや「golf」コンテスト*3 に参加する。たとえば、普通のプログラマなら1 つのプログラムを丸ごと必要とするような関数を、埋め込みコードを使って単一の正規表現で実装してしまう。Perl コアにパッチを送ったり、新しいメジャーなモジュールを寄贈したりすることで、Perl コミュニティで有名人になるかもしれない。\n";
} else {
print "error\n";
}
}
}
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment