在Ruby中,shell单行中的sub,gsub(和其他文本方法)如何在不引用对象的情况下工作?

Mil*_*joo 2 ruby

我在网上某处看到了这段代码:

ruby -pe 'gsub /^\s*|\s*$/, ""'
Run Code Online (Sandbox Code Playgroud)

显然,这段代码从STDIN的每一行中删除了前导和尾随空格.

我理解正则表达式和替换,没问题,但我没有得到的是该方法如何gsub接收一个对象来采取行动.我明白这个-p标志将整个事情包裹在一个while gets; print; ... ; end块中,但是如何gsub接收字符串来处理呢?至少,不应该是一个$_.gsub(..)相反?如何将当前输入行"神奇地"传递给gsub

这些类似Perl的单行代码是否以稍微不同的方式解释?我正在寻找与传统的基于脚本的Ruby代码的差异的一般概念.我很害怕,还没有找到一套全面的资源.

dav*_*nes 6

事实证明,这是一个在Kernel上定义的实例方法,只有在使用-p或-n标志时才会神奇地启用它.

ruby -pe 'puts method(:gsub);'

#<Method: Object(Kernel)#gsub>
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档.

我发现其他的神奇方法是chop,printsub.

神奇的方法都是$_隐式发送的.