20

私は Perl を長く使ってきたので、その特異性の多くが私の第二の天性になっています。新しいプログラマーが私たちのグループに参加するとき、彼らは Perl の経験がほとんど、またはまったくないことが多く、通常、彼らを (必要な範囲で) トレーニングするのは私の仕事です。Perl は初めてだが他の言語の経験があるプログラマーをトレーニングする際に、何に焦点を当てるべきか知りたいです (この質問は言語に依存しないことを意図していますが、私が一緒に働いたほとんどの開発者は Java 出身です)。

私にはいくつかのことが起こります:

  • シジルの正しい使い方
  • 参照/逆参照
  • mapgrepsortなどのリスト関数の使用

プログラマーが Perl に移行するのを支援する際に特に役立つと思われる点はありますか? 類似点または相違点、またはその両方を同等に強調しますか?

4

19 に答える 19

20

私の本の目次をチェックしてください。LearningPerlIntermediatePerlはどちらも、プログラマーにPerl言語を教えるように設計されています。私たちは、ほとんどの人が常に使用しているPerlの80%をカバーし、何年にもわたって人々にPerlを教えてきたことからそれを開発しました。各本はチュートリアルとして設計されており、各章の終わりに演習があります。また、追加の演習を提供するために、Learning PerlStudentWorkbookを作成しました。Perlのプログラミングも良いリファレンスです。

Perlを「取得」するために知っておく必要のあるルールは実際にはほとんどなく、ほとんどの人はコードを見るだけではこれらのルールを正しく取得できません。別の言語から来ている新しいPerlerに教えるためのいくつかのこと:

  • 厳格な警告
  • スカラーとリストのコンテキスト
  • 動的スコープと字句スコープ
  • 印章は可変型ではありません
  • リストの作成と操作(マップ、grep、ソート)
  • CPANを効果的に使用する方法
  • データとしてのクロージャとサブルーチン
  • Perlでの再帰は最悪です

幸運を :)

于 2008-09-26T21:20:44.737 に答える
14

Perlの「キラーアプリ」はCPANだと思います…</p>

CPAN を初めて閲覧した後の典型的な引用:

「あなたは何のためのライブラリを持っていますか?」
Extirpate HTMLはこれまでで最高の関数名に違いありません!」
「Perl でテキストを要約できますか?」

プログラマーは、難しいことをいかに簡単に行うことができるかを理解すると、売り込まれます。

次に、 perldocCamelを表示できます。

于 2008-09-26T20:29:08.950 に答える
11

Perl Training Australiaを所有および管理しています。Perl を約 8 年間、コンピューター サイエンスを 10 年以上教えてきました。私は Perl だけでなく、教育やプレゼンテーション全般に​​ついても強い意見を持っています。私は Perl について何百ページもの文章を書いてきました -- ここでは繰り返しません -- だから、私があなたに与えるつもりは、Perl を教える上でのアドバイスではありません。代わりにメタアドバイスです。

まず、時間と予算が許せば、専門の Perl トレーニング コースにスタッフを派遣することを検討してください。専用コースには、仕事の中断がなく、職場での政治がなく、Perl を学ぶときに人々が直面する困難をよく知っている人がいるという利点があります。自分のことをよく知っていて、Perl コミュニティの活発なメンバーであるトレーナーがいることを確認してください。これは、投げかけられた質問に答えたり、質問者を適切な参照先に誘導して詳細を確認したりできる必要があることを意味します。はい、私は Perl トレーニング ビジネスを経営しているので、ここでは非常に独断的です。

なんらかの理由で専用のコースに参加できない場合は、Perl でプログラミングする方法を人々に教えるために特別に設計された本を入手して、それについて説明してください。物事を見逃したり、物事を間違った順序で導入しようとしたり、(天国では禁じられている) 悪い習慣を教えたりするのは簡単であり、これらすべてがあなたの人生を困難にする可能性があります. 多くの場合、Perl を教えるために設計された本を書いている人々は、Perl トレーニング ビジネスで成功を収めている人々と同じです。書籍を購入する場合は、 Learning Perlの最新バージョンをお勧めします。本をダウンロードしたい場合は、 Perl Training Australia の Web サイトからProgramming Perlコースのノートを入手することをお勧めします。

これらの本には両方とも演習が付属しており、これが最後のメタアドバイスになります。Perl を学んでいる人は必ず演習を行ってください。新しいスキルを習得するとき、何が起こっているかを理解していると考えるのは非常に簡単ですが、物事を実践するときは、見た目よりも難しいことに気づきます。これは、他の言語ではまれな「コンテキスト」などのプログラミング概念が適用できる Perl の場合に特に当てはまります。通常、演習は、特定のスキルを教えたり、特定の落とし穴を強調したりするように特別に設計されています。学習中にこれらのことを理解することは、プロジェクトの締め切りの前夜にそれらを理解するよりもはるかに簡単です.

于 2008-09-27T13:00:40.143 に答える
8

私は、常に魔法のマントラを使うように彼らに言うことから始めます:

use strict;
use warnings;

その理由を (まだ) 知る必要はありません。

次に、perldoc を紹介し、基本的な使用法 (-f フラグと -q フラグ、perldoc perl と perldoc perltoc など) を示します。質問があるときにどこを見ればよいかを知る必要があります。

スカラー対リストコンテキストについて話します。

基本的なデータ型 (スカラー、配列、ハッシュ) と、シジルがデータ型ではなくコンテキストに従う方法を紹介します!

と紹介$_@_ます。$_非常に多くの場所で暗黙のうちに使用されているため、理解することは非常に重要です。@_サブルーチンを書くのに不可欠です。他の句読点変数は使用頻度がはるかに低く、待機できます。

彼らに正規表現を紹介し、正規表現が Perl の第一級オブジェクトであるという考えに慣れさせます。

Perl の「対角」構文を簡単に示します。のようなイディオムnext unless /foo/は、一度使えば素晴らしいものですが、他の言語、特に「直交」言語から来ると非常に異質に見えます。

参照についてすぐに話す必要はありません。データ構造を必要とすることを行う準備が整うまで待ちましょう。map好きなように機能し、grep待つこともできます。

基礎の上にしっかりとした土台を作ります。しばらくの間、赤ちゃんの一歩を踏み出させてから、より高度な機能とイディオムを混ぜてください。

于 2008-09-26T20:36:59.150 に答える
7

もう 1 つの驚くべき側面は、コンテキストです。リストまたはスカラー (または void) コンテキストで参照されるかどうかに応じて、関数または変数でさえ異なる動作をするという事実は、Perl 研修生にとって重要な詳細です。

私は通常、「高レベル」の組み込み関数 (map、grep、splice、split) を主張します。TMTOWTDI のせいで、多くのプログラマーは Perl のより馴染みのある側面 (C スタイルのループ、substr、index など) しか覚えておらず、それらだけを使用しています。

言語に慣れた後、中級 Perlおよび上級 Perl プログラミングにより、Perl の世界へのさらなる洞察を得ることができます。

于 2008-09-26T21:17:18.443 に答える
7

彼らに見せることができる最も重要なことは、ドキュメントへのアクセス方法と、ドキュメントの検索方法 ( perldoc perltocperldoc -q $keywordなどperldoc -f $function) です。

Perl には、リファレンスやチュートリアル スタイルの資料を含む優れたドキュメントが付属しています。初心者がアクセスできるようにすることは、彼らのためにできる最も効果的なことです。

于 2008-09-26T20:23:44.673 に答える
6

おそらくあなたが探しているものとは正確には異なります。事前にお詫び申し上げます。

本当に必要でない限り、類似点を指摘することはしません。
Perlは独自の世界で機能します。必要に応じてPerlをJavaスタイルでプログラムすることもできますが、ポイントは何ですか?

私がPerl(および私のPerlチューター)から学んだ最も重要な教訓は、「それを行うには1つ以上の方法がある」ということです。ですから、Perlを学ぶ最良の方法は、プログラミングに対する態度を受け入れ、各プログラマーが自分の道を見つけたときにそれをサポートすることだと思います。

あなたが作っている例、リスト関数などは、自然に使用されるものです-Perlの「物事のやり方」を理解して初めて、それらの力を理解することができます。

ちょうど私の2セント。

于 2008-09-26T20:13:44.227 に答える
6

率直に言って、私は彼らにキャメルをあげたいと思います。とても読みやすく面白い本です。私はまだ「Perl は自明であるために真実を保持している」と笑っていますが、最初に読んでから 10 年が経ちました。

于 2008-09-26T20:41:18.467 に答える
4

私は最近Perlを手に入れなければならなかったJavaプログラマーです。私が最も慣れにくい部分は、$ _ $〜$'などの特別な組み込み変数でした。あなたがそれらに慣れるまで、どれが何をするかを追跡するのは難しいです。

そしてもちろん、正規表現の使用。

たとえば、コードを維持する必要がありますが、以下の行を初めて見たときは少し混乱していました。Javaプログラマーとしては、それはぎこちないように見えます。

next unless "$_" !~ /^#/;
于 2008-09-26T20:13:09.533 に答える
4

付け加えることができるのは、表現力の低い言語から来た人は、ハッシュ式やハッシュと配列のスライス式を理解できない可能性があるということです。最近では、すべての言語にPCREライブラリがあるようです。

ああ、そしてモリッツのアイデアに追加するために、私は同僚にそれについて指導しました。

さらに、Data :: Dumper、Scalar :: Util、List :: Util、およびそのような非常に便利なモジュールに関する説明をいくつか含めました。

そして、そのことについては、DamianのPerl Best Practicesをチェックして、より強力な提案のいくつかを入手してください。

于 2008-09-26T21:24:05.587 に答える
3

私は(perlopからの)さまざまな引用演算子を選びます:

       Customary  Generic        Meaning        Interpolates
           ''       q{}          Literal             no
           ""      qq{}          Literal             yes
           ``      qx{}          Command             yes*
                   qw{}         Word list            no
           //       m{}       Pattern match          yes*
                   qr{}          Pattern             yes*
                    s{}{}      Substitution          yes*
                   tr{}{}    Transliteration         no (but see below)
           <<EOF                 here-doc            yes*

           * unless the delimiter is ''.

このリストは圧倒される可能性がありますが(特に代替区切り文字を追加する場合)、非常に便利です。Perlが持っているさまざまな引用符を持っている言語はほとんどないので(もしあれば!)、コードを読むときにも役立ちます。

于 2008-09-26T20:18:05.963 に答える
2

これは 1 つの詳細であり、あなたの質問に対する完全な回答ではありませんが、私にとって、本当に Perl に傾倒した人の特徴は、このイディオムに取って代わる人です。

for (my $i = 0; $i < @a; $i++)
{
  &do_something_with($array[$i]);
}

このイディオムで:

foreach my $a (@array)
{
  &do_something_with($a);
}

リストを単なる配列としてではなく、リストとして教えてください。すばらしいデータ構造を教えてください。リスト、ハッシュ、ハッシュのリスト、リストのハッシュ、ハッシュのハッシュを教えます。ここで、ほとんどの従来型の厳密に型指定された言語に比べて、最大の強化が行われます。(皮肉なことに、私が今年参加した Java ショップでは、任意の深さでネストされた HashMap 構造を大量に扱っていました。実際、多すぎます。私は、それを少し減らすように主張しています! しかし、Perl では、この種のこと重要です。)

于 2008-09-26T20:33:55.177 に答える
2

他の人が言ったように:

use strict;
use warnings;

多分

use diagnostics;

Java プログラマー向け:

use autodie; #or Fatal

English.pm
Moose/Mouse
Perl::Critic
perltidy

于 2008-10-02T20:35:11.443 に答える
2

冗談ですが、あなたが何をするにしても、このようなものを最後に見せてください! ;)

use integer;@A=split//,<>;sub R{for$i(0..80){next if$A[$i];my%t=map{$_/9
==$i/9||$_%9==$i%9||$_/27==$i/27&&$_%9/3==$i%9/3?$A[$_]:0=>1}0..80;R($A[
$i]=$_)for grep{!$t{$_}}1..9;return$A[$i]=0}die@A}R
于 2008-09-26T20:48:44.567 に答える
1

職場での経験に基づいて、Perlのドキュメント(すでにここで説明されています)から始めて、コマンドラインでコードをテストする方法を学生に示すことをお勧めします。誰かがその場で何かを試し、それが正しくなるまで修正を加えることができるときに、どれほど早く言語を習得できるかは本当に驚くべきことです。

于 2008-11-25T22:37:33.683 に答える
1

Perl のプログラミング( #22483 の共著- Randal さん、お疲れ様でした。私は 10 年近く使っています) は、Perl の素晴らしい入門書でした。正規表現から始まり、配列のスライスとダイシング、連想配列などに加えて、Perl でレポートを作成する理由と方法、および関数リファレンス。

第 3 版でどの程度変更されたかはわかりませんが、コースの基礎として教科書として使用します。それはかなり簡潔で要点です。さらに、コースはドキュメントと一致します。

于 2008-10-08T07:45:31.443 に答える
1

私はまさにこのシナリオに雇われました。私は C++ と Java の開発者で、現在の仕事に就くまで Perl に触れたことがありませんでした。慣れるのに少し時間がかかったのも、独特の Perl 構文の選択 [$_]、 $this = that until ... 、およびツリーのフォレストの表示 (/^#+\d/ 要素を含むもの) でした。他のことは、私が働いているプログラミングハウスの結果でした[OOステートメント、$selfを混乱させ、1を置きます。モジュールファイルの最後に]。

しばらくここにいると、仕事以外のプロジェクトにも Perl が与えてくれたスタイルの要素が見えてきます。タスク、特にデータ マッサージへのアプローチ方法が異なり、私のツールボックスの中で本当にしっかりしたツールのように感じます。

そうは言っても、約 35,000 行のコードベースであるキャメル ブックを渡され、CPAN を使用できないと言われました。充実した6か月でした。^^

于 2008-10-02T20:45:16.270 に答える
0

C++/Java/C# コーダーの場合、私が前もって強く強調する 2 つの違いは次のとおりです。

いいえ 1: Perl では、ほとんどすべてに意味がありますが、常に必要なものとは限りません。良い例は次のとおりです。

  • シジルのない変数名は実行を停止しません - それらはベアワードとして解釈されます
  • 配列をスカラーに格納しようとすると、長さが得られます
  • ハッシュをスカラーに格納しようとすると、「a/b」が得られます (使用中のバケットと合計バケットの数?)

No 2: Perl では、作業を進めながら作成できます。他の作品では、「ハッシュ 'w' では、キー 'x' は、ボックス 'y' が 'z' を保持する無名配列にインデックスを付ける」と言うことができます。

于 2008-09-26T20:27:13.180 に答える
0

Ok。確かに、ある時点で strict を使用する必要があります。そして、ある時点でライブラリを使用したいことを確認してください。しかし、strict は Perl の基本的なファイル開始の魔法であり、各言語にはライブラリがあります。これらは、最初に学ぶべき非常に重要なことではないと思います。

Perl を使い始めたが、他の言語を既に知っている場合は、$a と $b が特別な変数であること、-1 を使用してインデックスを作成できることなど、クレイジーな特異性を知る必要があります。

振り返ってみると、Perl を学んだ方法がとても気に入っています。Perl ゴルフをプレイすることでした。

言語を極端に使用すると、言語のクレイジーな部分をすべて見つけ出す必要があり、さまざまな構成要素を本当に理解する必要があります。特に、友人/同僚/のグループでこれを行っている場合、これは非常にうまく機能します。

(もちろん、これが唯一のトレーニングであってはなりません;)しかし、ある時点で非常にうまく機能すると本当に信じています)

于 2011-02-27T12:56:33.317 に答える