2

私はウェブ上のどこかでこのコードを見ました:

ruby -pe 'gsub /^\s*|\s*$/, ""'

明らかに、このコードは、STDIN の各行から先頭と末尾の空白を削除します。

私は正規表現と置換を理解していますが、問題はありませんが、メソッドが操作対象のオブジェクトをどのようにgsub受け取っているかはわかりません。フラグがこの全体をブロックで-pラップしていることは理解していますが、どのように文字列を受け取って動作するのでしょうか? 少なくとも、代わりにすべきではありませんか?現在の入力行はどのようにして "魔法のように" に渡されますか?while gets; print; ... ; endgsub$_.gsub(..)gsub

これらの Perl ライクなワンライナーのコードは、多少異なる方法で解釈されますか? 従来のスクリプトベースの Ruby コードとの違いについての一般的な考えを探しています。残念ながら、これに関する包括的なリソース セットは見つかりませんでした。

4

2 に答える 2

6

これは、-p または -n フラグを使用した場合にのみ魔法のようにオンになる、カーネルで定義されたインスタンス メソッドであることが判明しました。

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

#<Method: Object(Kernel)#gsub>

こちらのドキュメントを参照してください。

私が見つけた他の魔法の方法は、、、chopおよびprintですsub

魔法のメソッドはすべて$_暗黙的に送信されます。

于 2013-04-30T08:54:56.660 に答える