やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

「PerlからRubyへ」を読む

 Perlはほとんど触ったことがないけれど。

情報源

PerlからRuby

Perlとの類似

  • RubyGemsというパッケージ管理システムがある
  • 正規表現エンジンがある
  • 一般的な区切り文字や正規表現構文はPerlと同様です
  • 二重引用符の文字列中に#{var}とすると式展開できる
  • シェルコマンドを実行するにはbackticksのようにします

Perlとの違い

RubyGemsというパッケージ管理システムがある

gem --help
RubyGems is a package manager for Ruby.

  Usage:
    gem -h/--help
    gem -v/--version
    gem command [arguments...] [options...]

  Examples:
    gem install rake
    gem list --local
    gem build package.gemspec
    gem push package-0.0.1.gem
    gem help install

  Further help:
    gem help commands            list all 'gem' commands
    gem help examples            show some examples of usage
    gem help gem_dependencies    gem dependencies file guide
    gem help platforms           gem platforms guide
    gem help <COMMAND>           show help on COMMAND
                                   (e.g. 'gem help install')
    gem server                   present a web page at
                                 http://localhost:8808/
                                 with info about installed gems
  Further information:
    https://guides.rubygems.org

 おすすめのgemみたいなのは必要になったときに探す。とりあえず以下みたいな感じのがあれば参考になりそう。

正規表現エンジンがある

> /\d{4}/.match('0123456789')
=> #<MatchData "0123">

 /パターン/.match(被テキスト)という書式で正規表現マッチできる。なにもrequireせずに動作した。すばらしい。

 置換はどうするのか。BashsedをやるときはString#gsubを使うっぽい。

'0123456789'.gsub(/\d{4}/, 'ABCD')
> '0123456789'.gsub(/\d{4}/, 'ABCD')
=> "ABCDABCD89"

 gsubってのがわかりにくい名前。でもやはり何もrequireせずに動作する。いいね。

一般的な区切り文字や正規表現構文はPerlと同様です

コード 概要
%q{this} 一重引用符
%Q{this} 二重引用符
%w{this for a single-quoted list of words} 複数の要素を二重引用符化
%W{abc #{1+2} } 上記に加えて式展開する

区切り文字は、望むなら%Q|can| %Q(use) %Q^other^のようにもできます

 上記のように書いてあったが、irbでコピペすると動作が止まった。よくわからんので放置。

二重引用符の文字列中に#{var}とすると式展開できる

name = 'ytyaru'
puts "#{name}" #=> ytyaru

 つい${name}{name}{{name}}と間違えそうになる。似たような展開書式はほかの言語にもあるからね。

シェルコマンドを実行するにはbackticksのようにします

> `echo 'ABC'`
=> "ABC\n"

 マジか。そんなことできたのね。バッククォートでシェルコマンド実行するのはBashと同じだ。RubyBashの上位互換みたいに見える。

 私は自動化ツールみたいなのをサクッと書きたい。まさにRubyはうってつけの言語にみえる。BashPythonよりも短くわかりやすくてバグりにくいコードが書けるんじゃないかと期待。

=>はハッシュリテラルにだけ使われます

 ハッシュリテラルというのは以下のような奴だと思う。

> {'key' => 'value'}
=> {"key"=>"value"}

 ところで他にも=>が使われているところがあったよね? rescue => eってやつ。

begin 
  raise # エラーを発生させます。
rescue => e
  p e #=> RuntimeError
ensure 
  p "絶対実行"
end

 これもハッシュリテラルなの? 違うよね? じゃあなんなのさ。=>の使われている所ってじつは他にもあるんじゃないの? わからん。放置するしかない。

所感

 Perlに触発されてRubyを作ったらしいからか、べた褒め。でもRubyが書けたらPerlはいらないってことでいいよね? 他にもやりたい言語はあるし。とりあえずRubyは良さげ。どんどん勉強していこう。

 じつは昔、Rubyの環境構築でハマったせいで嫌煙していた。でももうやらない理由はない。

対象環境

$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux