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
せずに動作した。すばらしい。
置換はどうするのか。Bashのsed
をやるときは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と同じだ。RubyがBashの上位互換みたいに見える。
私は自動化ツールみたいなのをサクッと書きたい。まさにRubyはうってつけの言語にみえる。BashやPythonよりも短くわかりやすくてバグりにくいコードが書けるんじゃないかと期待。
=>
はハッシュリテラルにだけ使われます
ハッシュリテラルというのは以下のような奴だと思う。
> {'key' => 'value'} => {"key"=>"value"}
ところで他にも=>
が使われているところがあったよね? rescue => e
ってやつ。
begin raise # エラーを発生させます。 rescue => e p e #=> RuntimeError ensure p "絶対実行" end
これもハッシュリテラルなの? 違うよね? じゃあなんなのさ。=>
の使われている所ってじつは他にもあるんじゃないの? わからん。放置するしかない。
所感
Perlに触発されてRubyを作ったらしいからか、べた褒め。でもRubyが書けたらPerlはいらないってことでいいよね? 他にもやりたい言語はあるし。とりあえずRubyは良さげ。どんどん勉強していこう。
じつは昔、Rubyの環境構築でハマったせいで嫌煙していた。でももうやらない理由はない。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- Ruby 3.0.2
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux