[#5219] ruby for perl users — Noritsugu Nakamura <nnakamur@...>

35 messages 1997/11/09
[#5220] Re: ruby for perl users — tateishi@... (Tateishi Takaaki) 1997/11/09

立石です。

[#5224] Re: ruby for perl users — shugo@... (Shugo Maeda) 1997/11/09

前田です。

[#5243] read from subprocess — Kikutani Makoto <kikutani@...>

きくたにです。

17 messages 1997/11/10
[#5250] Re: read from subprocess — matz@... (Yukihiro Matsumoto) 1997/11/11

まつもと ゆきひろです

[#5300] Win32用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...>

はじめまして、竹林といいます。

14 messages 1997/11/15
[#5302] Re: Win32用の Rubyでの tkの使用 — WATANABE Hirofumi <eban@...> 1997/11/15

わたなべです.

[#5303] Re: Win32 用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...> 1997/11/15

[#5305] Re: Win32 用の Ruby での tk の使用 — aito@...5sun.yz.yamagata-u.ac.jp 1997/11/17

あ伊藤です.

[#5320] ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

20 messages 1997/11/18
[#5337] Re: ruby 1.0-971118 released — WATANABE Hirofumi <watanabe@...> 1997/11/19

わたなべです.

[#5340] Re: ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#5398] 配列への追加について — a-nisida@... (西田明良)

はじめまして、西田@初心者 と申します。m(..)m

16 messages 1997/11/22

[ruby-list:5447] [Summary 01/02] Re: ruby for perl users

From: Noritsugu Nakamura <nnakamur@...>
Date: 1997-11-26 13:39:11 UTC
List: ruby-list #5447
中村です。

「Perl ユーザの素朴な疑問集」を一応まとめてみました。
HTML 化していたのですが、なかなか作業が進まないので
とりあえずプレインテキストで。

皆様の答えをおおいに活用させていただきました。
改行が多いせいか、長くなってしまいましたので、
2 分割にします。

# japan.lang.ruby でなく japan.comp.lang.ruby でした。


=== 文字列 ===
= 文字列の連結はどうやれば良いのでしょうか?

Perl では、
$str = "foo" . "bar";
などとしていましたが、ruby では、

rbc0> str = "foo" + "bar"
"foobar"

とします。これは文字列型(クラス)の + という
メソッドに連結が割り当てられているからです。


= 文字列の繰り返しはどうやれば良いのでしょうか?

Perl では、
$str = "foo" x 5;
などとしていましたが、ruby では、

rbc0> str = "foo" * 5
"foofoofoofoofoo"

とします。


= 文字列の展開がされないようですが、どうしてですか?

Perl では、
$name = "Nakamura";
print "I am $name.\n";
などとしていましたが、ruby では、

name = "Nakamura"
print "I am #{name}.\n"

のように${と}でかこってください。
グローバル変数($nameとか)やインスタンス変数(@nameなど)の場合は、
print "I am #$name.\n"
のように{と}を省略することができます。


= 部分文字列を切り出したいのですが、どうやれば良いのでしょうか?

Perl では substr を使いますが、ruby では、

self[offset, length]
で部分文字列を取り出すことができます。

self[firstIndex...lastIndex]
でも OK です。

rbc0> str = "0123456789"
0123456789
rbc0> str[2,3]
234
rbc0> str[2..4]
234


= 文字列比較の eq, ne とか、あるのでしょうか?

文字列の比較も数値同様 == でOKです。

rbc0> str1 = "abc"
abc
rbc0> str2 = "abc"
abc
rbc0> str1 == str2
TRUE

ruby では == は同値を意味します。
オブジェクトの同一性を調べたい場合は equal? を使って
ください。また、lt gt le ge <=> に相当するものとして
それぞれ < > <= >= <=> があります。

ただし、ruby では Perl のように数値と文字列が勝手に
変換されることはないので、1 == "1" は Perl では 1(真)、
ruby では FALSE になります(print では to_s が暗黙の
うちに呼ばれますが、これは例外です)


= chop, chomp はあるのでしょうか?

chop は str.chop で OK です。

rbc0> "abc".chop
ab

chomp は、Version 1.1 からは使うことが出来ます。


= 置換はどうやったら良いのでしょうか?

Perl の s///; や s///g; や tr///; に相当するものとして、
文字列クラスに sub, gsub, tr などのメソッドがあります。

rbc0> "abcabc".sub("a", "d")
"dbcabc"
rbc0> "abcabc".gsub("a", "d")
"dbcdbc"
rbc0> "abcabc".tr("abc", "ABC")
"ABCABC"

 ! がついていると文字列の中身を書き換えます。

rbc0> str = "abcabc"
"abcabc"
rbc0> str.sub("a", "d")
"dbcabc"
rbc0> str
"abcabc"
rbc0> str.sub!("a", "d")
"dbcabc"
rbc0> str
"dbcabc"


= Perl の ord はあるのでしょうか?

str.unpack("C") で OK です。でも、str[0] の方が簡単です。

rbc0> "A".unpack("C")
[65]
rbc0> "A"[0]
65

ちなみに str = "A" のとき str[0] は 65(Fixnum) になりますが、
str[0, 1] は "A"(String) になります。


= pack("C", char) はどう書けば良いのでしょうか?

[char].pack("C") で OK です。でも、char.chr の方が簡単です。
C 言語に慣れてる人の場合は sprintf "%c", char の方が
しっくりくるでしょうか。

rbc0> char = 65
65
rbc0> [char].pack("C")
"A"
rbc0> char.chr
"A"
rbc0> sprintf "%c", char
"A"


=== 配列 ===
= 配列の初期化とアクセスはどうやれば良いのでしょうか?

rbc0> array = ["a", "b", "c"]
["a", "b", "c"]
rbc0> array[0]
"a"
rbc0> array[0] = "A"
"A"
rbc0> array[0]
"A"


= 配列の連結はどうやれば良いのでしょうか?

 + を使います。これは配列クラスの + という
メソッドに連結が割り当てられているからです。

rbc0> ["a", "b", "c"] + ["d", "e", "f"]
["a", "b", "c", "d", "e", "f"]


= 配列の要素数はどうやったら知ることが出来ますか?

Perl では $#array や @array などでしたが、
ruby では配列クラスに length もしくは size という
メソッドがあります。

rbc0> array = ["a", "b", "c"]
["a", "b", "c"]
rbc0> array.length
3
rbc0> array.size
3


= 空リストはどう書けば良いのでしょうか?

Perl では () でしたが、
ruby では [] で表します。


= 多次元配列を扱うことは出来ますか?

できます。


=== 連想配列 ===
= 連想配列の初期化はどうやれば良いのでしょうか?

Perl では
%hash = ('smtp' , '25', 'finger', '79');
などとしていましたが、ruby では、

rbc0> hash = {"smtp" => 25, "finger" => 79}
{"smtp"=>25, "finger"=>79}

とします。ちなみに Perl では、
%hash = (smtp , 25, finger , 79);
と書けますが、ruby では

hash = {smtp => 25, finger => 79}

とすることはできません。(できるけど違う意味です)


= 連想配列のアクセスはどうやれば良いのでしょうか?

rbc0> hash["ftp"] = 21
21
rbc0> hash["ftp"]
21

とします。

In This Thread