【问题标题】:Perl: Create alphanumeric sequencial varsPerl:创建字母数字序列变量
【发布时间】:2017-09-08 03:43:26
【问题描述】:

我想请求帮助来创建一个 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

等等

谢谢

【问题讨论】:

  • 我不明白你想做什么。请edit您的问题并清理您的代码。这不是有效的语法。您的数字序列中也没有字母值。这只是数字。 var 部分不是变量。 Perl 中的变量有一个 sigil。这是名称前面的内容,例如 $ 表示标量值,@ 表示数组,% 表示哈希。
  • 你的问题还不清楚。目前尚不清楚您要获得什么。您的代码有错误。你说的字母数字是什么意思?在您的示例输出中不是字母数字输出。
  • 对不起代码,但我需要创建一个新变量,命名为 VAR + 每个循环中 $x 的整数(var1,var2,var3,...)。创建变量后,它们将存储来自第一个和第二个 FOR 循环的值(11、12、13...;21、22、23...)。另外,我可以在所有第一个 for 循环中创建数组,我只需要一些关于如何创建以及如何在其中存储第二个循环值的指导。
  • 我已编辑您的代码以添加一些缩进。不客气,但以后请自己做。如果你想让一大群陌生人阅读和理解你的代码,那么让它尽可能易于阅读当然是有礼貌的。

标签: perl variables alphanumeric


【解决方案1】:

你要求的是一个非常糟糕的主意。您想创建一个变量,使用另一个变量的值作为名称的一部分。这被称为“符号引用”,它是use strict 变成致命错误的三件事之一是有充分理由的。

有关它可能导致的问题的详细讨论,请参阅 Mark Dominus 的 these three articles

几乎可以肯定,解决问题的最佳方法是使用数组、散列或其他(更复杂的)数据结构。但是,如果不了解更多关于您在做什么的信息,就很难提出任何具体的建议。

【讨论】:

  • 谢谢。如果使用散列或数组,是否可以创建一个增量键的名称,而不是我可以添加第二个循环值?
  • @EmersonSoares:Perl 有可用于字符串和数字的前置和后置增量运算符 ($x="a";say ++$x)。所以我假设你可以做你想做的事,尽管我还不清楚“增量键的名称”是什么。
【解决方案2】:

Don't try to generate variable names!

你只需要

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;
}

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多