Perlの変数(スカラー)は頭に$がついてました。Rubyの変数も同じように$をつけることができます。Perlでは$はスカラー変数を表していましたが、Rubyではグローバル変数を表します。ローカル変数の場合は、$をつけません。
takk@deb9:~$ irb irb(main):001:0> $a="GLOBAL" => "GLOBAL" irb(main):002:0> b="local" => "local" irb(main):003:0> def aaa() irb(main):004:1> puts $a irb(main):005:1> puts b irb(main):006:1> end => :aaa irb(main):007:0> aaa GLOBAL NameError: undefined local variable or method `b' for main:Object from (irb):5:in `aaa' from (irb):7 from /usr/bin/irb:11:in `<main>' irb(main):008:0>
このように、$aはグローバル変数なので、aaaの中で参照できますが、bは、ローカル変数のため、aaa内から参照できません。
コマンドラインで使う分には、ほとんどローカル変数で事足りますので、$をつけないことになります。$がないと変数名が短くなるわけですので特な気がしますが、Perlでやっていたこんな表現ができなくなります。
takk@deb9:~$ perl -e '$a="HELLO"; print "$a $a\n"' HELLO HELLO takk@deb9:~$
Rubyで同じことをすると、当然なんですが文字列がそのまま表示されます。
takk@deb9:~$ ruby -e 'a="HELLO"; print "a a\n"' a a takk@deb9:~$
変数の中身を表示するには、こう書くことになります。
takk@deb9:~$ ruby -e 'a="HELLO"; puts a+" "+a' HELLO HELLO takk@deb9:~$
Rubyの変数は、インスタンス、クラス変数がありますが、コマンドラインで使う予定がないので覚えてません。Rubyはオブジェクト指向ですので、変数もオブジェクトです。
takk@deb9:~$ irb irb(main):001:0> a="123" => "123" irb(main):002:0>
今、文字列”123″をaに格納しました。aに1を足してみます。
irb(main):002:0> a + 1 TypeError: no implicit conversion of Fixnum into String from (irb):2:in `+' from (irb):2 from /usr/bin/irb:11:in `<main>' irb(main):003:0>
エラーになりました。文字列に数値の1を足したので当然ですね。Perlの方が特殊なのかもしれません。
aを数値として解釈するには、数値に変換するメソッドを使えばよいです。
irb(main):003:0> a.to_i + 1 => 124 irb(main):004:0>
頼もしいですね。オブジェクトなので、メソッドを使えば何でもできる気がしますね。
コメント