Perl:创建字母数字序列变量
Perl: Create alphanumeric sequencial vars
我想请求帮助创建一个 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
等等
谢谢
你要求的是一个非常糟糕的主意。您想要创建一个变量,使用另一个变量的值作为名称的一部分。这被称为 "symbolic referencing" 并且有一个很好的理由为什么它是 use strict
变成致命错误的三件事之一。
有关它可能导致的问题的详细讨论,请参阅 Mark Dominus 的 these three articles。
几乎可以肯定,解决您的问题的最佳方法是使用数组、散列或其他一些(更复杂的)数据结构。但是如果不了解更多关于你在做什么,很难提出任何具体的建议。
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;
}
我想请求帮助创建一个 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
等等
谢谢
你要求的是一个非常糟糕的主意。您想要创建一个变量,使用另一个变量的值作为名称的一部分。这被称为 "symbolic referencing" 并且有一个很好的理由为什么它是 use strict
变成致命错误的三件事之一。
有关它可能导致的问题的详细讨论,请参阅 Mark Dominus 的 these three articles。
几乎可以肯定,解决您的问题的最佳方法是使用数组、散列或其他一些(更复杂的)数据结构。但是如果不了解更多关于你在做什么,很难提出任何具体的建议。
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;
}