福間@福岡 です。

記事 <19990512230555W.hideo / asahi-net.or.jp> にて、
Koyama Hideo<fa8h-kym / asahi-net.or.jp> さんは書きました:

> 初歩的な質問で恐縮ですが
> たとえば、Perlで
> 
> $\="\n";
> $,=",";
> while(<>){
> 	chop;
> 	split(/,/);
> 	print @_[0],@_[1],@_[0] + @_[1];
              ^     ^     ^       ^
# `$' ですね(^^;  これでも一応動くみたいですが。

> }
> 
> あるいは awkで
> BEGIN {FS=OFS=","}
> { print $1,$2,$1+$2 }
> 
> のような処理を ruby でするにはどのようにするのでしょうか?

  ARGF.each_line do |line|
    fields = line.chomp.split(/,/)
    puts [ fields[0], fields[1], fields[0].to_i + fields[1].to_i ].join(',')
  end

ってな感じでどうでしょう。
上のPerlコードふうに書くと

  $\ = "\n"
  $, = ","
  while gets
    chomp!
    fields = split(/,/)
    print fields[0], fields[1], fields[0].to_i + fields[1].to_i
  end

くらいかな。Perlやawkなどと違って、Rubyでは "1" + "2" は 3 という*数値*
ではなく "12" という*文字列*になりますから、明示的に to_i という
メソッドを使って整数オブジェクトに変換してあげる必要があります。

# 逆に言うと、オブジェクトは自分自身がどう振る舞うべきかを知っている
# ので、文字列なら + や * の代わりに . や x を使わなくちゃいけない、
# といったことを、プログラマの側がわざわざ考えてあげなくても済みます。

#   12  * 3 ==> 36            (整数)
#  "12" * 3 ==> "121212"      (文字列)
#  [12] * 3 ==> [12, 12, 12]  (配列)

awkコードふうなら

  #!/usr/local/bin/ruby -nal
  
  BEGIN { $; = $, = "," }
  print $F[0], $F[1], $F[0].to_i + $F[1].to_i

ってな感じ。-n / -a / -l オプションの意味は perl とだいたい同じです。
Perlの $[ に相当する機能は、残念ながらありません:)

---
 Yasuhiro Fukuma (福間 康弘) as Yasu.F @ Kitakyushu.Fukuoka.Japan
 Web site: http://www8.big.or.jp/~yasuf/
 “InterNIC is NOT NSI!”