デフォルトの変数 $_ Perl

すべての変数は、Perlプログラミング言語を含む単一の値 始まりは、ドル $. 例えば、作成できます変数 $str$var.

Perlが特殊変数 $_. 多くの場所がありますプログラミング言語 Perlがない場合は明示的に指定した数まで使用 $_. あるキーワードとしての価値からこの変数がその る価値観にこの変数となります。 この変数 保存の値です。

キーワードの値の読み取りから $_

一例として、キーワードを読み取るの値をデフォルトの変数 鉛 print. 指定した場合 print ずに引数の画面を印刷内容の変数 $_.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

$_ = 'Hello';

print;

まず、保存された変数 $_ ライン 'Hello'(注 して使用されますが、これをキーワード my).

を使用していま printで送信しないで引数になります。 この利用 print を表示内容の変数 $_. print; と同じ print $_;

その結果、プログラムはテキストを表示 Hello.

キーワード print, say 使用時の引数無しで使用 デフォルトの変数 $_. が挙げられているのは興味深いキーワード warn 利用の場合 引数のない変数 $_ 使用しないでください。

別の例利用時のデフォルトの変数は正規表現です。 するために正規表現を別の変数を記述する必要があります $str =~ /.../. とばを書くだけです /.../,ってはお入れすることができない $_ =~ /.../.

こちらは小さなコード例:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

$_ = 'Hello';

if (/ll/) {
    print 'yes';
} else {
    print 'no';
}

条件 if (/ll/) { かどうかのチェック可変 $_ 二つの文字 l います。 で線'Hello' がこれらの二つの文字のコードは実行 print 'yes';、テキストが表示され yes 画面に表示します。

キーワードを入れた価値 $_

最も使用頻度の高いキーワードに変化する変数の値 $_foreach. この例のコード:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

foreach ('one', 'two', 'three') {
    say;
}

こちらのボディにプ foreach は3倍の各項目をリストから 'one', 'two', 'three'. 前の実行ループ本体の変 $_ が配置され、次の要素をクリックします。 できますので、このサイクルのどの位置付けの変数 $_: foreach $_ ('one', 'two', 'three') {

を使用していま say; と同じ say $_;.

別の言い方に価値の変動 $_ を利用 while (<>) {. こちらのコード:

#!/usr/bin/perl

while (<>) {
    print " * $_";
}

このコードを読み込みSTDIN、出力をとして各路線に値下げ一覧です。 ここで、制御することが可能である。 仕事をこのコードをコンソール:

$ perl -e 'print "1\n2\n3\n"' | perl script.pl
 * 1
 * 2
 * 3

一つ目は、perl odnotrahnikiプレスの三線各線ます。 そしてこのリダイレクト出力の入力には、スクリプトとしたものを書く。 本体のループ while (<>) { が行われるまでの入力は、この文字列は変数 $_.

# 例

こちらは別の例のコードが積極的にデフォルトの変数 $_:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = map { ucfirst } grep { /^.{3}\z/ } ('one', 'two', 'three');

print Dumper \@arr;

場合このプログラムを実行すると画面に現れる:

$VAR1 = [
          'One',
          'Two'
        ];

でいます。 表現が課題価値の配列の @arr 必要なものを右から左折。

  • し、その一方でリストの文字列 ('one', 'two', 'three')
  • その後、使用したキーワード grep はこの一覧です。 grep 箇所の各要素のリストに変数 $_ -チェック、書くせていただけるボディーです。 の場合 この試験はtrueを返し、その後 grep の値を返します。 この例では、巻きブラケットを含む正規表現に適用されるデフォルトの変数となります。 この正規表現を満たすだけの文字列で構成される正三文字です。 の結果 grep がリストの二つの文字列 ('one', 'two').
  • リストの二つの要素に陥 map. このキーワードを各リストの項目 デフォルトの変数行のコードが巻きていただけるボディーです。 また、この結果を返します コードリスト項目を返します map. この例で使用している機能 lcfirstは、文字列を返しますが初の文字は大文字にしています。 この機能を 引数を指定しない、その作品は、デフォルトの変数となります。

公式文書

このスニペットの出力 perldoc perlvar Pro変 $_:

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

                while (<>) {...}    # equivalent only in 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:

            *  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.

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

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

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

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

            *  The implicit variable of "given()".

            *  The default place to put the next value or input record when
               a "", "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.

            $_ is a global variable.

            However, between perl v5.10.0 and v5.24.0, it could be used
            lexically by writing "my $_". Making $_ refer to the global $_
            in the same scope was then possible with "our $_". This
            experimental feature was removed and is now a fatal error, but
            you may encounter it in older code.

            Mnemonic: underline is understood in certain operations.

関連する話題

その他の記事