Perl: создание буквенно-цифровых последовательных переменных

Я хотел бы попросить помощи в создании кода Perl, в котором я мог бы создавать буквенно-цифровые последовательные переменные (которые можно было бы использовать как массив, хэш или любой другой вид переменных).

for ( my $x = 1; $x <= 10; $x++ ){
  my $var$x = "" *# to create empty variable with the word 'var' + the integer from x (var1, var2, var3, ...)* 
  for ( my $y = 1; $y < 10; $y++){
    my $var$x = $var$x.''.$x.''.$y *# to store/concatenate the values from $x+$y into var$x*
  }
  print "$var$x"
}

Что следует напечатать:

var1 = 11, 12, 13, 14, 15, 16, 17, 18, 19
var2 = 21, 22, 23, 24, 25, 26, 27, 28, 29

и так далее

Спасибо


person Emerson Soares    schedule 07.09.2017    source источник
comment
Я не понимаю, что ты хочешь делать. Пожалуйста, отредактируйте свой вопрос и очистите код. Это недопустимый синтаксис. В вашей последовательности чисел также нет алфавитных значений. Это просто цифры. Часть var не является переменной. Переменные в Perl имеют сигил. Это то, что стоит перед именем, например $ для скалярного значения, @ для массива и % для хеша.   -  person simbabque    schedule 07.09.2017
comment
Ваш вопрос до сих пор неясен. Непонятно, что вы пытаетесь получить. В вашем коде есть ошибка. Что вы подразумеваете под буквенно-цифровым? В вашем примере вывода нет буквенно-цифрового вывода.   -  person serenesat    schedule 07.09.2017
comment
Извините за код, но мне нужно создать новую переменную с именем VAR + целое число от $ x в каждом цикле (var1, var2, var3, ...). Создав переменные, они сохранят значения из первого и второго цикла FOR (11, 12, 13 ...; 21, 22, 23 ...). Кроме того, я могу создавать массивы внутри всего цикла first for, мне просто нужны некоторые рекомендации о том, как создавать и как хранить в нем значения второго цикла.   -  person Emerson Soares    schedule 07.09.2017
comment
Я отредактировал ваш код, чтобы добавить отступ. Пожалуйста, но, пожалуйста, сделайте это сами в будущем. Если вы хотите, чтобы большая группа незнакомцев прочитала и поняла ваш код, тогда, конечно, вежливо будет сделать его как можно более легким для чтения.   -  person Dave Cross    schedule 07.09.2017


Ответы (2)


То, о чем вы просите, - очень плохая идея. Вы хотите создать переменную, используя значение другой переменной как часть имени. Это известно как «символическая ссылка», и есть очень веская причина, почему это одна из трех вещей, которые _1 _ превращается в фатальную ошибку.

Подробное обсуждение проблем, которые это может вызвать, см. В этих три статей от Марка Доминуса.

Почти наверняка лучшим решением вашей проблемы является использование массива, хэша или какой-либо другой (более сложной) структуры данных. Но, не зная больше о том, что вы делаете, трудно делать какие-либо конкретные предложения.

person Dave Cross    schedule 07.09.2017
comment
Спасибо. В случае использования хеша или массивов, можно ли создать имя инкрементного ключа, чем я могу добавить к нему значения второго цикла? - person Emerson Soares; 07.09.2017
comment
@EmersonSoares: В Perl есть операторы пре- и пост-инкремента, которые работают как со строками, так и с числами ($x="a";say ++$x). Итак, я предполагаю, что вы можете делать то, что хотите, хотя мне далеко не ясно, что такое имя инкрементного ключа. - person Dave Cross; 07.09.2017

Не пытайтесь создавать имена переменных!

Все что тебе нужно это

for my $x (1..10) {
   for my $y (1..9) {
      print "$x$y\n";
   }
}

Или, если вы хотите заполнить структуру данных вместо печати,

my @matrix;
for my $x (0..9) {
   for my $y (0..8) {
      $matrix[$x][$y] = ($x+1).($y+1);
   }
}

То же, что и предыдущее:

my @matrix;
for my $x (1..10) {
   my @row;
   for my $y (1..9) {
      push @row, "$x$y";
   }

   push @matrix, \@row;
}
person ikegami    schedule 07.09.2017