perl-5.22.1
$ARG
$_

The default input and pattern-searching space. The following pairs are equivalent:

デフォルトの入力とパターン検索のスペース。 以下の 2つは同値です:

    while (<>) {...}    # equivalent only in while!
    while (defined($_ = <>)) {...}
    while (<>) {...}    # while の中でのみ等価!
    while (defined($_ = <>)) {...}

    /^Subject:/
    $_ =~ /^Subject:/

    tr/a-z/A-Z/
    $_ =~ tr/a-z/A-Z/

    chomp
    chomp($_)

Here are the places where Perl will assume $_ even if you don't use it:

あなたが使いたくなくても Perl が $_ を仮定する場合がいくつかあります:

  • The following functions use $_ as a default argument:

    以下の関数は $_ をデフォルト引数として使います:

    abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, evalbytes, exp, fc, glob, hex, int, lc, lcfirst, length, log, lstat, mkdir, oct, ord, pos, print, printf, quotemeta, readlink, readpipe, ref, require, reverse (in scalar context only), rmdir, say, sin, split (for its second argument), sqrt, stat, study, uc, ucfirst, unlink, unpack.

    abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, evalbytes, exp, fc, glob, hex, int, lc, lcfirst, length, log, lstat, mkdir, oct, ord, pos, print, printf, quotemeta, readlink, readpipe, ref, require, reverse (スカラコンテキストのみ), rmdir, say, sin, split (の 2 番目の引数), sqrt, stat, study, uc, ucfirst, unlink, unpack

  • All file tests (-f, -d) except for -t, which defaults to STDIN. See "-X" in perlfunc

    デフォルトが STDIN である -t を除く全てのファイルテスト(-f, -d)。 "-X" in perlfunc を参照してください。

  • The pattern matching operations m//, s/// and tr/// (aka y///) when used without an =~ operator.

    =~ 演算子なしで用いられたパターンマッチ演算 m//, s///, tr/// (またの名を y///)。

  • The default iterator variable in a foreach loop if no other variable is supplied.

    foreach ループでの他の変数が補われなかった場合のデフォルトの繰り返し変数。

  • The implicit iterator variable in the grep() and map() functions.

    grep() 関数と map() 関数の暗黙の繰り返し変数。

  • The implicit variable of given().

    given() の暗黙の変数。

  • The default place to put the next value or input record when a <FH>, readline, readdir or each operation's result is tested by itself as the sole criterion of a while test. Outside a while test, this will not happen.

    <FH>, readline, readdir, each が単独で while テストで テストされた場合の、次の値や入力レコードを入れるデフォルトの場所。 while テスト以外ではこれは起こりません。

$_ is by default a global variable. However, as of perl v5.10.0, you can use a lexical version of $_ by declaring it in a file or in a block with my. Moreover, declaring our $_ restores the global $_ in the current scope. Though this seemed like a good idea at the time it was introduced, lexical $_ actually causes more problems than it solves. If you call a function that expects to be passed information via $_, it may or may not work, depending on how the function is written, there not being any easy way to solve this. Just avoid lexical $_, unless you are feeling particularly masochistic. For this reason lexical $_ is still experimental and will produce a warning unless warnings have been disabled. As with other experimental features, the behavior of lexical $_ is subject to change without notice, including change into a fatal error.

$_ はグローバル変数です。 しかし、perl v5.10.0 から、ファイルやブロックで my で宣言することで、 レキシカル版の $_ が使えます。 さらに、our $_ という宣言は現在のスコープでグローバルな $_ を 再構築します。 これは導入した時点ではいい考えに思えましたが、実際にはレキシカルな $_ は 解決するものよりも多くの問題を引き起こします。 $_ 経由で情報が渡されると想定している関数を呼び出すとき、関数の 書かれ方によって動作したりしなかったりします; これを解決する簡単な方法は ありません。 自分が特にマゾと言うのでない限り、単にレキシカルな $_ を使うのを 避けてください。 この理由により、レキシカルな $_ は実験的なままで、警告を無効にしない限り 警告が出力されます。 他の実験的機能と同様、レキシカルな $_ の振る舞いは(致命的エラーへの変更を 含めて)通知なく変更される可能性があります。

Mnemonic: underline is understood in certain operations.

記憶法: 下線はある操作を覚えるためのもの。