まず、自分がなんとかPerlを勉強していきたいという目的で作ってみました。
CGIという言葉がよく聞かれています。ダイナミックHTMLなんていうときいろんな方法が考えられますね。動きがあるURLを作りたいなんてときはJavaScriptにしたりする。CGIというのはブラウザを使ってさまざまな処理をさせる仕組みのことです。当然そのためにはなんらかのことをなにかに頼まないといけない。それをPerlに頼むのです。実はPerl以外にもWebサーバーで動く言語ならなんでもいいんです(C,C++とか)。でも、一般的にはPerlが使われます。簡単だけど奥が深い。まだ覚えてからぜんぜん月日が経ってないんだけどそう感じています。自分のためにという目的でとりあえずPerlにかんするURLを作ってみた。
CGIはいきなりつくることもできてじつは簡単です。でも、せっかくだからPerlを覚えたい(つまり、CGIはPerlを覚えなくてもできたりします(^^;;)。きっと、CGIをやってるとこういうことはできないんだろうか?とか応用をしたいという欲求が高まると思います。そのためにもPerlと言う言語と仲良くなると言う趣旨でいきたいです。あと、僕自体が初心者というのもあるのでかなり大目に見てもらいたいです。 (Last Modified 2000/12/02 Sat.)
|
1.まずは準備!
Perlと言う言語
Perlを使うためには?
Perlのインストール
Perlを僕はWindowsで使いたい!
ActivePerl
Perlをどこからでも使いたい。PATHを通す。
まずはPerl -vから
最初の記念すべきプログラム
Perlの遊び方
|
2.下ごしらえに何を知っていればいいんだろう?
Perlに実行させるファイルの書き方
実行権限(Linixの場合)
|
3.具体的なプログラム
ハッシュ
引数
|
1.まずは準備!
●まずはPerl -vから
うまくインストールができたことを前提にしますが、まずコンソール画面(なんのしゃれっけもないあの黒い窓のことです。WindowsでDOS窓とかLinuxなんかではktermが標準的でしょうか?)でperl -vとうちます。ぼくはこれからWindowsで動かすことを前提に話します。でも、Linuxで動かす場合もほとんどおなじです。だから、違う場合にはちゃんと説明をします。というか、本家はUnixで生まれた言語なのでそっちが本式なんですが、僕がWindowsで動かしているもので。
すると、こんなぐあいになりますか??(ちなみにこの画面はWindowsでActivePerlを動かした場合です)
C:\>perl -v
This is perl, version 5.003_07
Copyright 1987-1996, Larry Wall
+ suidperl security patch
Win32 port Copyright (c) 1995-1996 Microsoft Corporation.
All rights reserved.
Developed by ActiveWare Internet Corp., http://www.ActiveWare.com
Perl for Win32 Build 316 - Built 23:00:34 Jun 19 1998
Japanization patch 4 by Yasushi Saito, 1996
Modified by Hirofumi Watanabe, 1996. jperl5.003_05.patch7_1
Modified for Win32 by @Tori, 1997
Ported by hizumi@yk.rim.or.jp. Build 118
SJIS version
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5.0 source kit.
|
|
ちゃんとおなじでなくってもいいんですがこんな感じの長いコメントがでてればいいです(エラーメッセージではこまりますが(^^;;)。この中にあるLarry Wallっていう人がこのPerlの作者です。どこかの会社に勤めていたときに作っていたそうです。なんでも長くていつもおんなじことをやらせることができないかと思って作ったんだそうです。すごいとおもいます。この人はたしか2000年11月末に京都に来るはずです。たしか。(Last Modified 2000/11/19 Sun.)
●最初の記念すべきプログラム
DOS 窓からまず、perlと打ってみる。するとカーソルが次の行に動いてそのまま動かない。プロンプトが点滅するだけです。でも、安心ください。実はこれは待機状態なのです。もうプログラムの準備はできているんです。つぎにprint "Hello,World!"とうってみてください。そのあとに、Ctrl+dをうつと(コントロールキーを押しながらアルファベットのdをうつ)次の行にHello,World!とでてきたでしょうか?もしできたらもうあなたもPerlを使っています。簡単ですね。もしうまくいかなければきっと設定が悪いのだと思います。設定を見直してみましょう。
Windowsの場合
C:\>perl
print "Hello,World!;"
Hello,World!
C:\
|
|
Linuxの場合
% perl
print "Hello,World!;"
Hello,World!
%
|
|
●Perlの遊び方
本当はPerlはDOS窓なんかから直接入力するように使うものではありません。実際にはファイルを作ってそこにコマンドを書き込んで実行するようにできています。そのファイルは*.plなんて拡張子を付けるのです。するとこのファイルはPerlという言語でかかれているものだと理解して実行してくれるのです。ただ、それだけでは駄目です。ファイルをまず作ってみましょう。
Perlファイルの作り方
適当なフォルダにfirst.plなんてファイルを作ってみます(ぼくはわかりやすいようにフォルダの名前にpworkという名前を付けてPerl関係はそこでおこなっています)。適当なエディタを起動します(Windowsではメモ帳なんてのがいいんでしょうか?僕は秀丸というエディタがおすすめですがフリーでもいいものがたくさんあります。最近はWindowsではMeadow、LinuxではEmacsです)。そしてまず、
print("1+1=");
print(1+1);
print("\n");#改行の意味です。
|
|
これをcalcと名前を付けてほぞんします。あ、"#"というのはコメントをいれるときに使うきごうです。これを付けた後、改行するまでの文はプログラムとしての効力がなくなります。注釈をつけたり、この部分はとりあえず実行させたくないって時に付けると便利です。これはたんなるテキストファイルです。普通に保存しようとするともしかしてそのエディタはcal.txtなんて名前を付けてしまうのかもしれないですから保存するファイルの名前を付けるときに拡張子を種類なしにしておきましょう。つぎにそのファイルを実行します。DOS窓なんかからperl calcなんてうって実行します。すると、
Windowsの場合
C:\> perl calc
1+1=2
C:\>
|
|
Linuxの場合
となったでしょうか?
う〜ん、たんに動かすと言うだけでも大変だったでしょうか?インストールするところをあえて省いて説明したんですけど言葉が足りないなぁとも思うし、間違っているところもあるように思うんですけどとりあえずこんなかんじです。よくわかんないと思いますが最初はそんなものです。というか、ぼくもまだよく分かっていません。でも、プログラムを作るという目標をもったらPerlが一番取っつきやすいんではないでしょうか?C言語とかポインタとかでてきてかなり大変です。実際、Perlも進んでいくととっても難しいですがつまり敷居が低いと言うことができると思います。フリーですし、とりあえず何かを作ってみたい、けど実用的なものがいい、ってひとはぜひPerlを。これからは具体的なプログラム例を紹介します。コピー&ペーストしてどんどん覚えていきましょう>me and maybe anybody?,who see current URL...(_。_)。ο〇(Last Modified 2000/11/26 Sun.)
2.下ごしらえに何を知っていればいいんだろう?
●Perlに実行させるファイルの書き方
Perlに実行させるためには、実行させたいファイルの拡張子を*.plにするのが普通です。が、それはCGIをやったり、GUIでファイルを見たりするときにわかりやすくなると言うことはあるけど、なくても実行できます。エディタで保存するときには種類なしを選んで拡張なしで保存しても大丈夫と言うことです(さっきそうでしたね)。ただ、*.plとやるとWindowsなんかではそのファィルをダブルクリックすると実行できると言うことはあります。僕は見やすくするために.plをつけているのでこれから説明するファイルには拡張子を付けています。これからの説明では、拡張子をつけています。
さて、さっきまでperl calcのようにperl **というように書いていましたが今はPerlを実行させているんだからいちいち書くのは面倒ですね。これはどうにかならないでしょうか?
Perlをインストールしたところを覚えているでしょうか?WindowsでActivePerlを入れた人はそのままインストールしたなら、C:\Perl\binにあると思います。よくわからなければ、検索で、Perl.exeを探してみるといいと思います。
Linuxならコマンドでwhichがあるのでwhich perlとやるとパスがでてきます。たいていは/usr/local/bin/perlだとおもいます(僕は/usr/bin/perlだったのでこれからそれで書いていきます)。
実はこのパスをつかうのです。
論より証拠、まずはkuku.plを作ってみます。
#!/usr/bin/perl # Windowsなら#!C:\perl\binとかってかきます。
# -- kuku.pl Perlに九九をお願いします
print ("9*9 =");
print (9*9);
print "\n";# 改行
|
"#!"というのが今回の命題で、これを付けてからPerlの実行パスを書くとなんともうperl **なんて書かなくてもいいのです。これはCGIでも大切なことになるので覚えておきましょう。
Linuxの場合(Windowsも同様です)
ちゃんと計算していますね。僕はあんまりプログラム経験がないので勝手に実行されるものにいちいち感動しています。
僕の場合、実はこれで動きませんでした。入門書なんかではつっこんだことにはなるべく口を挟まないようにしているんでちょっと失敗するとどうしようもなくなります。
ぼくがうまくいかなかったのは % kuku.plとうっても
bash: diamond.pl: command not found
のように言われてしまったのです(Linuxの場合です)。
そんなコマンドはないといわれています。じつはこれはLinuxなどのUnixではセキュリティのためにそうなっているのです。もし、kukuというファイルを作ってそれがどのディレクトリにいても実行できてしまうと悪意を持った人がkukuというプログラムをどこかに潜ませていたらそれが実行されてしまうことになります。絶対パスで実行させるのです。たとえば、作業ディレクトリが/home/hide/pwork/だとしたら、
% /home/hide/pwork/kuku.pl
とやるとうごきます。こんなに長くしなくても相対パスを使って、
% ./kuku.pl
とやってもうごきます。Windowsにはパスを通すというのがありますが、もちろんLinuxにもあります。ただ、ちょっとむずかしいです。bashってのがでていますが、あれがその構造を管理しているやつなんです。shellなんていったりします。まだ、僕は初心者なんでよっぽど言われたときにしかLinuxでパスを通したりはしません。
そうそう、Windowsではその辺大丈夫だと思います。ちゃんと、Perlの実行ファイルにパスが通っていれば直に
C:\pwork> kuku.pl
でうごきます。
とにかく、こうして失敗して大きくなっていくんです。きっと。そろそろ眠くなってしまいました。ちょっと書くだけで大変なんですね。そうだ、まだ大事なことがある。それはUnix系では実行権限ってのがあるんです。
●実行権限(Linuxの場合)
まだ大事なことがあります。それはUnix系では実行権限ってのがあるんです。
chmodというコマンドを使います。
Permission deniedというエラーがでた方いますか?これはあなたはこのファイルは実行する権限がありません、ということです。ひどいです。僕のパソコンなのにこんなことを言われるのかって落ち込みます。でも、これを治すのは簡単です。
% chmod a+x kuku.pl
あるいは
% chmod 755 kuku.pl
とやってください。どちらも同じ意味です。これで実行できます。Unixはみんなで使うように作られているのでファイルごとにそのファイルをいじれる権限というのがあるんです。ちなみにWindowsは関係ないです。どんどん実行できます。でも、セキュリティの面からははるかに優れたシステムだと思います。
ほぅ。ぼくもこんなことを覚えていったんだなぁなんて感動です。ちょっと説明するだけでもこんなに書かないといけないんだなぁ。よくあるURLの作者とか入門書を書いている人の気持ちが分かってきました。ぼくもPerlは仕事で使うものでもなく、ただ趣味で勉強中です。プログラム言語って案外独学がききます。覚えるときは気長にしかしテーマを決めて取り組んでいくといいみたいですよ。聞きたいことが書いてないとかっておもってたんだけどそんなのあたりまえなんですね。環境がみんな違うんだし、エラーの出方もある意味無数にあるし。今度は、いままでも出てきている、printについて説明します。そろそろほんとに寝ます。3:03のようです。おやすみなさい(_。_)。ο〇
今回の「へそで茶を沸かすぜ」
今回はそろそろいろんなサンプルを使って具体的にチュートリアルめいたことをしようとしたんですがちょっと困ったことになりました。実は僕はPerlで書いたファイルを拡張子を*.plとしているんですが、僕が使わせてもらっているGeocitiesではその拡張子をアップさせるのを拒否しているんです。おそらくCGIを禁止しているからだと思いますが。そうそう、CGIをやろうとしている人は自分が立ち上げようとしているプロバイダがCGIを許可しているのかどうか確かめた方がいいです。ちなみに一般的にはCGIは*.cgiという拡張子を使います。Webサーバーがその拡張子をみてサーバーがわにあるPerlに仕事を頼むのです。今まで作ったPerlファイルを一気にアップしておこうと思ったんですが失敗でした。まぁ、拡張子を消してしまえばいいんでしょうが。PerlをつかってCGIやりたいんだけど*.plではなくて*.cgiなの?なぜ?と思った方しばらくおまちください。とは言ってもむずかしいことではないです。単に*.plを*.cgiになおしてしまうだけです。名前変えるだけなんです。でも、そういえば、僕はWindowsの話をしていればよかったんだっけ?大体、UnixとかLinuxとか使える人は初心者ではないから人に説明されるまでもないと思います。でも、最近はLinuxも結構身近になってぼくのような初心者も手を出しているのですこしは触れておこうかなって思いました。
3.具体的なプログラム
●ハッシュ
今回はハッシュを紹介します。急にレベルがあがりますが、そのうちちゃんとチュートリアルの形にしていきます。ちょっと僕が必要なのでここに残しておきたいんです(それがここの趣旨でもあったりするけど)。
("APPLE",54,3)のように普通のカッコ(丸かっこ)で囲まれたものがリストです。リストとは、スカラが入った集合なんです。HASH,54,3はどれもスカラです。さらに、リストは配列に代入することができます。
#!c:\perl\bin
# AboutApple.pl -- リストを使って表示する
@list = ("APPLE",180,"aomori",3);
print $list[0],"\n";#APPLEと表示
print $list[1],"\n";#180と表示
print $list[2],"\n";#aomoriと表示
print $list[3],"\n";#3と表示
|
@list = ("APPLE",180,"aomori",3);
と一気に代入しています。しかし、個別に抜き出すことができるのです。
print $list[0],"\n";#APPLEと表示
print $list[1],"\n";#180と表示
print $list[2],"\n";#aomoriと表示
print $list[3],"\n";#3と表示
ここで注意するのは、配列というのは0から始まると言うことです。だから$list[3]は4番目の要素で全部で要素は4個あるのです(この辺は慣れていないと結構トラブルと思います。3個ではないんです。)。
配列の話が出たら必ず出てくる関数でforeachというのがあります。
まずはスクリプト(ファイルに書き込んだプログラム)から。
#!c:\perl\bin
# AboutApple2.pl -- リストに代入した値をforeachでとりだして表示
@list = ("APPLE",180,"aomori",3);
foreach $x (@list){
print "$x\n";
}
|
このAboutApple2.plは、AboutApple.plで行ったこととおなじになります。
これは、アルファベットを見ると分ると思いますが名前が林檎で、値段が380円で、個数が2個というようなことを表現しようと思っています。これは何なのかというとつまり何かを表現するときに対にしているのです。
さて、ようやくハッシュの話です。
まずはスクリプト(ファイルに書き込んだプログラム)から。
#!c:\perl\bin
%hash = ("NAME","ringo",
"PRICE",180,
"WHERE","aomori",
"COUNT",2)
print $hash{NAME},"\n";#RINGOと表示
print $hash{PRICE},"\n";#380と表示
print $hash{WHERE},"\n";#aomoriと表示
print $hash{COUNT},"\n";#2と表示
}
|
まずは解説から。
%hash = ("NAME","ringo",
"PRICE",180,
"WHERE","aomori",
"COUNT",2)
リストはハッシュに代入することができます。ハッシュというのは「キー」と「値」が対になったものです。だから、代入するリストをつくるときにはかならず対にしておかないといけません。なにを言っているのかはそんなに難しくないのでわかってきます。すぐに。
4行で書いていますが見やすくするためだけです。
が、行に分けるときは行末に「,」を付けておかないと駄目です。
また、ハッシュの内容は、
print $hash{NAME},"\n";#RINGOと表示
print $hash{PRICE},"\n";#380と表示
print $hash{WHERE},"\n";#aomoriと表示
print $hash{COUNT},"\n";#2と表示
これで表示できます。
今度は、今の表現を「キー」と「値」の関係がわかりやすいように
(NAME=>"RINGO",PRICE=>380,"COUNT"=>2)と表現してみます。これはPerlの文法なのでわかりにくいんですがわかりやすく書くと、
「キー」「値」
NAME RINGO
PRICE 380
WHERE aomori
COUNT 2
これで分ると思います。
まとめて表示するのはforeachを使うのでリストとおなじですが、今度はkeysというのがでてきます。keysとforeachを用いて
#!c:\perl\bin
%hash = (NAME=>"RINGO",
PRICE=>380,
WHERE=>aomori,
COUNT=>2);
foreach $key (sort keys %hash){
print $key, "=>",
$hash{$key}, "\n";
}
|
ちょっと複雑そうですが慣れると大したことはありません。これで関係づいたものを表現できるというのが重要なことです。林檎の値段が380円だということがかんけいづけられているのです。これはちょっとしたデータベースであると言えます。
もっと高度になるとリファレンスという概念を使います。リストのリファレンス、ハッシュのリファレンスというやつです。リファレンスというのはスカラです。具体的にはスカラ変数に代入できるというのが強みとなります(一気にスカラ変数に代入できるって言うのはあとあとかなり強力です)。
今回はこれで終わりです。いろいろでてきた記号ですが@,$というのがまず重要です。@はArray(配列),$はScarerと覚えておくとよいそうです。
このページは、「すぐわかるPerl(深沢千尋・技術評論社)」を底本にしています。なので、その本を読めばここに書かれている以上(誤解もなく確実に)のことを学べます。
今回のまとめ:
・(丸かっこ)で囲まれたものがリストである。
・リストの中にはスカラーが入っている。
・ハッシュ全体をしめす変数は、「%ハッシュ名」
・ハッシュの各要素にアクセスするには、print $ハッシュ名{キー名}」のように{}を使う。
・ハッシュ全体を初期化するには、{キー、値、キー、値、…}のようにキーと値を交互に対にしたリストを用いる。
|
●引数
今回は引数に関して勉強します。これはプログラムにある値を「渡す」ことです。コマンドラインでいろんなプログラムを実行させるときにはよく引数を使います。Unixコマンドでは、
ls -l hoge.txt
なんて使い方をします(これは属性なんかを表示させたいときのコマンド)この、-lとhoge.txtが引数です。
まず、簡単な計算をさせるプログラムを作ってみます。
#!c:\perl\bin
#easycalc.pl -- 簡単な計算をするプログラム
print ((1+2+3+4+5+6+7+8+9+10)/10);
print "\n";
|
実行すると、
c:\cygwin\home\hide\pwork>perl easycalc.pl
5.5
|
|
注意:
c:\cygwin\home\hide\pwork>は僕の作業環境での作業フォルダのパスです。なので気にしないでください。人それぞれ環境は違うと思いますが。この辺がちゃんと人それぞれの環境で動かすことの難しさになるんです。僕はCygwinというMS-WindowsでUnixコマンドが使えるという環境にしているんです。その上でMeadow というMs-WindowsでEmacsというUnix の超強力なエディタを使えるようにしています。UnixでもWindowsでもないようなそれでいてあるような不思議な環境です。それはここでは特に問題にしないです。とにかく、Perlを実行できる環境であれば。Windows(2000)+Cygwin+Meadow+Perlはおすすめですが。
|
さて、今回は引数の話です。今はファイルに計算式((1+2+3+4+5+6+7+8+9+10)/10)を書いて実行しました。しかし、これをコマンドラインで書いて実行することはできないでしょうか??そのことを引数を渡すという言い方をするのです。まず、引数というものがどんな感じに扱っていくもんなのかをみていきましょう。
#!c:\perl\bin
# argv.pl -- 引数って?
print "$ARGV[0]\n";
print "$ARGV[1]\n";
print "$ARGV[2]\n";
print "$ARGV[3]\n";
print "$ARGV[4]\n";
print "$ARGV[5]\n";
print "$ARGV[6]\n";
print "$ARGV[7]\n";
print "$ARGV[8]\n";
|
これを実行すると、
c:\cygwin\home\hide\pwork>argv.pl itimai
itimai
|
まずひとつひとつひもといていきましょう。引数というものをいれておくスカラが$ARGV[0]です。新登場の変数です。
この0という数字が何を指すのかというとこれは一つ目の引数という意味です。引数はいくつもつくれるってことなんです。つまり、$ARGV[0]は一つ目の引数、$ARGV[1]は二つ目の引数をあらわします(そう、Perlに限らずプログラミング言語では0から数字は始まるんです)。だから、二つ目にも引数をいれられます。
c:\cygwin\home\hide\pwork>argv.pl itimai nimai
itimai
nimai
|
続けてどんどんいれていきます。
c:\cygwin\home\hide\pwork>argv.pl itimai nimai sanmai
itimai
nimai
sanmai
|
c:\cygwin\home\hide\pwork>argv.pl itimai nimai sanmai yonmai
itimai
nimai
sanmai
yonmai
|
c:\cygwin\home\hide\pwork>argv.pl itimai nimai sanmai yonmai gomai
itimai
nimai
sanmai
yonmai
gomai
|
c:\cygwin\home\hide\pwork>argv.pl itimai nimai sanmai yonmai gomai rokumai
itimai
nimai
sanmai
yonmai
gomai
rokumai
|
c:\cygwin\home\hide\pwork>argv.pl itimai nimai sanmai yonmai gomai rokumai nanamai
itimai
nimai
sanmai
yonmai
gomai
rokumai
nanamai
|
ちょっと冬なのによけい寒くなってきました。番町皿屋敷はいつか観劇したいです。というわけで、引数の感じが分っていただけたでしょうか?ちなみに今回は引数を$ARGV[8]まで9個しか取っていなかったです。もし、10個入れたらどうなるでしょうか?僕は試していないです。ちょっと怖いですね(^^;
さて、実際計算をしてもらえるプログラムをつくってみましょう。その引数とやらに計算式を入れたらできそうな感じがしますね。
#!c:\perl\bin
#easycalcarg.pl --簡単な計算を引数で渡して実行
print "$ARGV[0]\n";
|
と書いて、実行させると
c:\cygwin\home\hide\pwork>perl easycalcarg.pl ((1+2+3+4+5+6+7+8+9+10)/10)
((1+2+3+4+5+6+7+8+9+10)/10)
|
あら、計算式が出力されてしまいました。困りました。どうやらプログラムはせっかく長い計算式を打ったのにそれが計算するものであると認識されていないようです(実際僕はこの間違いをしました(^^;)
よくいろんなことを考えないでやってしまったからです。引数に関してはいろいろおもしろいことがあるんですがそれは参考書を読んでください。
では、引数に関してははしょって、やろうとしていた引数に計算式をいれて実行させる方法をやります。
#c!:\perl\bin
#easycalcarg2.pl --簡単な計算を引数で渡して実行
$x = eval($ARGV[0]);
print "$x\n";
|
これを実行すると、
c:\cygwin\home\hide\pwork>perl easycalcarg2.pl ((1+2+3+4+5+6+7+8+9+10)/10)
5.5
|
こうなります。念願の計算プログラムです。今回はevalという関数を使いました。これでコマンドラインで実行させようとする計算式をちゃんと計算式として実行できました。これは$ARGV[0]の値をevalに渡して、$xに代入した結果です。evalとはevaluate(評価する)と言う意味があります。これをPerlプログラムとして評価された、というそうです。単に計算式を実行すると言うだけの関数ではありません。
ほかにも実行したい計算式を引数にして試してみてください。汎用的なプログラムだと思います。ちょっとevalのことを理解しているか試す意味でも
c:\cygwin\home\hide\pwork>easycalcarg.pl sqrt(2)
を実行してみてください。sqrtは平方根を求めるPerlの命令です。つまり、2の平方根を求めようとしているのです。
c:\cygwin\home\hide\pwork>easycalcarg.pl sqrt(2)
1.4142135623731
|
ほら、計算できました。有名な、「ひとよひとよにひとみごろ」です。蛇足で、3の平方根を求めると、
c:\cygwin\home\hide\pwork>easycalcarg.pl sqrt(3)
1.73205080756888
|
「ひとなみにおごれや」です。ほんと、人並みにおごるくらいがちょうどいいです。おごりすぎもおごらなすぎもよくないです。人間関係が悪くなります。
それはどうでもいいですが、つまりこのプログラムeasycalcarg2.plはevalを使ってPerlの命令を引数にして実行できるプログラムであることが分ると思います。
今回のまとめ:
・引数は、配列@ARGVにはいる。
・evalは渡された値をPerlのプログラムとして評価する。
|
今回の「へそで茶を沸かすぜ」
知りたいことの無限ループ
ちょっと前のところで、
「("APPLE",54,3)のように普通のカッコ(丸かっこ)で囲まれたものがリストです。リストとは、スカラが入った集合なんです。HASH,54,3はどれもスカラです。さらに、リストは配列に代入することができます」
と言う解説があったと思います。
リストがなんだかわかんなくってそれはスカラがはいった集合だと言われてでも、スカラがなんだか分らない。そんなことはないですか?ぼくはそうでした。そして、プログラムというか、パソコンに関するものってみんなこんな感じがしていて結構辛いです。人に聞くと、ヘルプを読めと言われます。
ヘルプってある程度自分の中で知りたいことを限定できる力がないと使えませんし、解説の中のものを解説して欲しいという無限ループに陥ってしまいます。
あまり無限ループの中にいると生活に大切なものを消費してしまいますので適当なところでうち切ってとりあえず分らないけどできる状態にもっていけるようにしたいもんです(僕らは一つのことだけをするために生きているわけではありません)。
スカラとベクトル
ちなみにスカラとは数値や文字列などの、一つの値を保持する変数や、数値文字列などのことを指すようです。高校の数学でベクトルってのがでてきたのをおぼえてるでしょうか?大きさと方向をもったものです。メネラウスの定理とかほら懐かしい言葉が思い出されるでしょうか?あの、ベクトルの定義のところに一瞬だけ教科書に書かれていたような気がします。スカラーって。ベクトルと対比されてただ大きさのみをもつものと定義されていたような気がします。ほとんどベクトルの陰に隠されてしまって登場しなかったですがこんなところで主役に躍り出てくるなんて思いもしなかったです。旧友に会ったような気がします。
僕は自他共に認める数学音痴だったんですがまがりまちがって理系になってしまい、しかもプログラムをやらないとならない立場にいます。人生何が起こるかわかんないですね。5年後の自分なんて想像がつかないですし。それはそれでわざと楽しんでるところがあるんですが。
だんだんこのURLも長くなってきました。一枚の画面でリンクを貼った方がいいのかそれとも章ごとにURLを変えてリンクを貼った方がいいのか悩みどころです。今後の更新状況にもよりますが。
(Last Modified 2000/12/02 Sat.)
今回は、Perlの得意技でもある文字列の操作についてすこしやります。文字列の操作はかなりたくさんの技があり、それらをすべて説明するのはむずかしいのであまりに簡単な例だけを紹介する形にします。
置換演算子s///
これは、例を挙げた方が早いです。
test.txt
咲いた咲いたチューリップの花が
ならんだならんだあかしろきいろ
どの花みてもきれいだな。
よくわからないサンプルですが、ご了承ください。一足早く春が来た。ということで(2000/12/17)
koukan.pl
#!c:\perl\bin
#koukan.pl--とりあえず、チューリップをひなげしに変える。
while(){
s/チューリップ;/ひなげし;/g;
print;