だんぺんぶこみっく

2007-03-3020070330

[][]いま(嫌々)Perlを勉強中なのですが 17:14 いま(嫌々)Perlを勉強中なのですが - だんぺんぶこみっく を含むブックマーク はてなブックマーク - いま(嫌々)Perlを勉強中なのですが - だんぺんぶこみっく

 ……どうもこの言語の文法とかって自分のいままでの言語遍歴(C->C++(VisualC++MFCも少し)->Java)の各言語の性質と勝手が違うせいか,難しい。

 (ちなみに,仕事のためではなく,今度受けるテクニカルエンジニア(情報セキュリティ)試験のため。)

 教材は昨日購入した「新版 Perl言語プログラミングレッスン入門編」(結城 浩氏著,ソフトバンククリエイティブ)を使用している。この本自体はさすが結城氏のご著書だけあって平易でいいんだけど,言語の文法がどうも。以下,気になる点やら不満やらを,メモとして箇条書き。

 (なお,Javaを勉強したときも結城氏の「Java言語プログラミングレッスン(旧版)」を最初に使っていた。前掲書は現在3章まで読了)

(1)なんで変数名の前に$をつけにゃならんのか

 これはPHP(以前,少し勉強した)にもいえるのだけど,なんで変数名の前に$をつけないといかんのか。押しにくいんですよ。$って(自分は普通の人より手が小さく,指が短いため,$をタイプするために左手の小指で左側shiftを押さえながら,左手の人差し指で「4」のキーを押すのが結構つらかったりする。また,左手でshift+右手で「4」は,普段キーボードの右側に位置している右手を移動する位置が大きいので,これもちょっと時間がかかる)。

 あと,配列の前に@をつけないといけないとかいうらしいのですが,これも…(まだ前掲書の配列の章までいってないが)

(2)なんでelsifなのか

 条件分岐は比較的C等と近い記述で書けるようだけど,if {~} else if {~} …じゃなくて if {~} elsif {~} なのが……(Cなどの記述と違うのでややこしい)。最初,前掲書のサンプルコード見たとき「誤植か」と思ったが,"elsif"が正しいって書いてあって……

(3)演算子

 and, or, not, eq, ne, lt…とかの比較演算子が(ry

(4)文字列連結

 これもPHPにもいえるのだけど,文字列連結の演算子が"+"ではなく"."というのが…(Cなどで,"+"は文字列連結,"."は構造体等のメンバ参照か小数点というふうに認識しきっているせいで困る)

 まえ,PHPでつい,Javaなどのノリで

 $dt = $test + " is a " + $xxx + " .\n"; 

とかいうコードを書いてしまい,なぜ連結できないのかえらい長い間悩んだことがある……

よいと思った点

 よいと思った点も。

 (1)if文の記法 … if文の中身の文が一つだけでも必ず{}で囲うことが必要な点(Cなどでは省略可能,前掲書47ページ)。これはif文などの影響範囲を明示するためのわかりやすい規則だと思う(自分も,Cなどでもかならず書くようにしている)。

 (2)標準入出力が簡単

 1行入力が my $a = <STDIN>; でいいってやつ(これがJavaだと,1行入力するだけで(略))

自分でもプログラムを書いた

 前掲書のサンプルは,(まだ最初の方の章だから)読んだだけで意味がわかるのが多いので,自分でプログラムを書いて動かしてみた(以下)。

use strict;
use warnings;

#入力
my $mess = <STDIN>;

if( index( $mess, "ウホッ" ) == 0 ) {
	print "やらないか\n";
}
if( index( $mess, "アッー!" ) != -1 ) {
	print "しゃぶれよ\n";
}
use strict;
use warnings;

#入力
my $mess = <STDIN>;

if( index( $mess, "ウホッ" ) != -1 ) {
	print "やらないか\n";
}
elsif( index( $mess, "好きです" ) != -1  ) {	#elseifじゃないんかい
	print "うれしいこと言ってくれるじゃないの\n";
}
else {
	print "お前オレのケツの中で(ry\n";
}

 (……って,最初に書いたプログラムがこんなのか)

トラックバック - http://fragments.g.hatena.ne.jp/TakahashiMasaki/20070330