2013-09-30 28 views
6

爲什麼我能做到Ruby的命令行單行子與掃描

ruby -pe "sub /.*{((\d+\.){3}).*/, '\115'" < file.txt 

但如果我嘗試的scan代替sub我得到

-e:1:<main>': undefined method掃描」主:對象(NoMethodError)

這是令人迷惑,因爲sub不在Object的方法無論是。

我也試了一下Perl的方式,像

ruby -ne "/.*/; puts $1" <file.txt 

,但沒有飛起來。

我在哪裏可以找到涵蓋此文件?

+0

sub是內核下的方法,它是包含在對象中的一個模塊,因此您可以在主對象的範圍內獲得它,因爲如果您在ruby 2.0上運行,那麼掃描並不是。如果你運行的是1.8.7,那麼你通過$ _掃描來調用掃描(pattern) – Raghu

回答

9

sub is a method on Kernel,一個模塊,其實例方法是全局可用的。該版本的方法在全局變量$_上運行,其中contains the string last read by gets

這是一個完全不同於String#sub的方法,它做了一個類似的過程,但是使用明確的字符串作爲接收者,而不是隱式地使用$_

+0

聽起來很有說服力,但我嘗試了'Kernel.methods.sort'和'Kernel.instance_methods.sort',我似乎無法在任何地方找到''''。 –

+0

我也很想知道你是如何得到這些知識的,我真的希望答案不是「從源頭上讀取」。 –

+0

@JonasElfström:他們就在'Kernel'文檔中...... – maerics