[ruby-list:86] Re: ruby vs. perl
From:
matz@... (Yukihiro Matsumoto)
Date:
1996-01-24 08:17:41 UTC
List:
ruby-list #86
まつもと ゆきひろ@トヨタケーラムです.
In message "[ruby-list:85] Re: ruby vs. perl"
on 96/01/24, P nakawtse <nakawtse@syrinx.dq.isl.ntt.jp> writes:
|> まあ,perlは決して分かりやすい言語ではありませんから,そうい
|> う意味でのalternativeは意味があると思います.私みたいにperl
|> の嫌いな人もいるでしょうし.
|
| perlが嫌いだったんですか???.
便利だなと思うんですけど,時々怒りを覚えるんですよね.
# ど〜してなんだよ〜っつうか
もし,perlを愛していたらrubyは作らなかったでしょうね.
|> rubyにも$_はあるんです.でも,rubyの$_はgetsの最後の戻り値と
|> いう意味しかないので,ちょっとperlとは違うなあ.基本的な思想
|> が違うんで真似してもしょうがない部分もあるんですけど.
|
| perlと同じ特殊変数は同じものだと思ってしまうのですが
| 違うところはどこなのでしょう?
確かに同じ名前で違う働きをすると混乱のもとですね(でもperlに
いわれたくないなあ).そのうち『perl使いの気をつけるべきこと』
というperlのmanにあるみたいなものをつけないといけないかなあ.
ちなみに相違点は以下の通りです.
同じところ
(1) gets(perlなら<>)の最後の値が格納される
(2) 正規表現のマッチのデフォルト(`if /abc/'とか)
違うところ
(a) gets以外は`$_'の値を変えない
(b) よってforのデフォルトの変数ではない
(c) ほとんどの関数は`$_'をデフォルト値にしない.例外は
sub/gsub/chopくらいか.
| #思想まで違うとは..
「ruby vs perl」のメイルでも書いたように,rubyはperlに似た機
能を違う思想(オブジェクト指向,lisp的?など)で設計した言語で
す.思想が違うのはむしろ当然ですね.なかにはperl大好きの人に
は不便に思えるものもあるかも知れません.
|> getsはfile{1,2,3..}からなる仮想ファイルから1行ずつ読み込ん
|> で来る関数です.
|
| file{1,2,3..} -> file1 file2 file3
| こんな展開?..
| file[1..3]とはまた違うのでしょうか?
ああ,これはrubyの記法ではなく,cshの記法のつもりでした.つ
まり「getsというのは,引数として与えられたファイル名で指定さ
れるファイルを繋げた仮想的なファイルから1行読み込む関数です」
という意味です.
# ちょっと省略しすぎですね.
| each(%assoc)では途中でリセットできないのでいやなのですが,
| rubyでは何とかなる?
途中でリセットできないというとeachの状態を戻せないということ
でしょうか.rubyならできます.
for k,v in assoc
処理
retry if 条件
end
で条件が成立する時,ループ全体を最初からやりなおせます.
|それからこんな記法(perl でいえば)とか↓
|
| @assoc{/xyz./} <−マッチするキーに対する値のリスト.
| #↓より効率よく処理していて欲しい.
| while( ($k,$v)=each %assoc){
| push(@lst,$v) if /xyz./;
| }
うーん,いくらrubyがどんどんクラスを追加することを推奨してい
るからといっても,「そういうクラスを書けばできます」というの
は反則でしょうねえ.
もし,あえて標準ライブラリの範囲内で記述するならば,
assoc.find_all{|k,v| v =~ /xyz./}
でしょうか.上のperlの例よりはちょっとましくらいの効率ですが.
perlの
grep(/xyz./, values %assoc)
を連想させますが,効率は全然違います.perlは最初に配列を作っ
ちゃいますから.
まつもと ゆきひろ /:|)