Как мне создать новые переменные с индексированными именами в Perl? - PullRequest
0 голосов
/ 24 декабря 2009

привет, я прочитал некоторый связанный вопрос, который, кажется, не помогает мне. это код, который объяснит, что я хочу.

for ($i=0;$i<5;$i++) {
  my $new$i=$i;
  print "\$new$i is $new$i";
}

ожидание имен переменных $new0, $new1, $new2, $new3, $new4, $new5. и иметь возможность использовать их в цикле, как пытается сделать команда печати. Спасибо

Ответы [ 5 ]

18 голосов
/ 24 декабря 2009

Вместо этого вы хотите использовать хеш или массив . Это позволяет собирать данные, оставаясь вместе, и приведет к меньшему количеству боли в будущем.

my %hash;
for my $i (0..4) {
    $hash{$i} = $i;
    print "\$hash{$i} is $hash{$i}\n";
}
11 голосов
/ 24 декабря 2009

Можете ли вы описать, почему именно вам нужно это сделать. Марк Джейсон Доминус написал, почему делать это не очень хорошая идея в Почему глупо «использовать переменную в качестве имени переменной» часть 1 , часть 2 и часть 3 .

Если вы считаете, что ваша потребность является исключением из описанных там случаев, сообщите нам, как это сделать, и кто-то здесь может помочь.

9 голосов
/ 24 декабря 2009

Вы задаете общий вопрос. Ответ в 99,9% случаев: НЕ ДЕЛАЙТЕ ЭТОГО .

Вопрос настолько распространен, что он есть в perlfaq7: как я могу использовать переменную в качестве имени переменной? .

См. " Как использовать символические ссылки в Perl? " для подробного обсуждения проблем с символическими ссылками.

2 голосов
/ 24 декабря 2009

вместо этого используйте хеш.

my %h=();
$new="test";
for ($i=0;$i<5;$i++) {
  $h{"$new$i"}=$i;
}
while( my( $key, $value ) = each( %h ) ) {
    print "$key,$value\n";
}
0 голосов
/ 24 декабря 2009

если вы хотите создать переменные типа $ newN, вы можете использовать eval:

eval("\$new$i=$i");

(лучше использовать хеш)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...