LoginSignup
10
9

More than 5 years have passed since last update.

for内の変数のうごき

Posted at

for文を使うとき、

  1. $_を使う
  2. my変数を使う
  3. 中でmy変数に代入して使う

のような書き方があると思うんですが、
それぞれを書き換えてみたとき、挙動が1と2は同じで、3だけ違ったのがびっくりだったので、めもめも。


  • 1. $_を書き換え
my @arr = qw/a b c d e f g/;

for (@arr) {
    if ($_ eq "c") {
        $_ = "!!!";
    }
}

print @arr;    # ab!!!defg 破壊的
  • 2. my変数を使って書き換え
my @arr = qw/a b c d e f g/;

for my $arg (@arr) {
    if ($arg eq "c") {
        $arg = "!!!";
    }
}

print @arr;    # ab!!!defg 破壊的
  • 3. 中でmy変数に代入して書き換え
my @arr = qw/a b c d e f g/;

for (@arr) {
    my $arg = $_;
    if ($arg eq "c") {
        $arg = "!!!";
    }
}

print @arr;    # abcdefg 非破壊的

こんな感じ。


Devel::Peekを使ってみてみたら、
1と2は内部的にまったく同じものとして処理されていました。
for宣言時のmy変数は、$_と同じく、for構文が用意してくれる変数、ということなのでしょうか。

一時的に中身を書き換えたい、というときなどは、ループ内で代入してあげるのがよさそうですね。

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9