在Perl中动态存储变量
我试图在Perl中动态存储和打印变量,方法是要求用户输入要创建的变量数量,然后要求每个已创建的变量添加信息,然后输出每个变量中包含的文本长度。在我的脑海里,我想到了这个:在Perl中动态存储变量,perl,Perl,我试图在Perl中动态存储和打印变量,方法是要求用户输入要创建的变量数量,然后要求每个已创建的变量添加信息,然后输出每个变量中包含的文本长度。在我的脑海里,我想到了这个: use strict; use warnings; sub main { my %VarStore = (); print ("How many variables to create: "); chomp(my $varNum = <STDIN>); my $counter
use strict;
use warnings;
sub main {
my %VarStore = ();
print ("How many variables to create: ");
chomp(my $varNum = <STDIN>);
my $counter = 1
while ($counter <= $varNum) {
print "Enter text to variable $counter: \n";
chomp(my $buffer = <STDIN>);
$VarStore{'var'$counter} = $buffer;
$counter ++;
}
while ($counter <= $varNum) {
print "Variable $counter is length($VarStore{'var'$counter}) character long \n";
$counter ++;
}
}
知道我的代码为什么不起作用吗?我在这里想到了一个散列,这样我就可以创建动态变量,比如,根据用户为创建动态变量而提供的输入,使用键var1、var2、var3等等。提前感谢。您认为哈希是解决此问题的好方法,这是正确的。代码中有两个问题。首先,
$VarStore{'var'$counter}
是无效语法,您需要使用
运算符连接字符串$VarStore{'var'.$counter}
,或者可以使用双引号将变量插入字符串$VarStore{“var$counter”}
与变量不同,您不能直接将函数调用插入字符串,因此length()调用应该单独完成。或者,您也可以将字符串与函数调用连接起来<代码>打印“变量$counter is”。长度($VarStore{“var$counter”})。“长\n”代码>
第二个问题是,在第一个while循环完成后,为下一个while循环重用的$counter变量将已经大于$varNum,因此需要将其重置为1<代码>$counter=1代码>
迭代计数可能更简单。此外,不需要sub-main,但如果使用它,则需要实际调用main()代码>某个地方,以便它运行
use strict;
use warnings;
my %VarStore;
print ("How many variables to create: ");
chomp(my $varNum = <STDIN>);
foreach my $counter (1..$varNum) {
print "Enter text to variable $counter: \n";
chomp(my $buffer = <STDIN>);
$VarStore{"var$counter"} = $buffer;
}
foreach my $counter (1..$varNum) {
my $length = length($VarStore{"var$counter"});
print "Variable $counter is $length character long \n";
}
使用严格;
使用警告;
我的商店;
打印(“要创建的变量数:”);
chomp(我的$varNum=);
foreach my$计数器(1..$varNum){
打印“将文本输入变量$counter:\n”;
chomp(我的$buffer=);
$VarStore{“var$counter”}=$buffer;
}
foreach my$计数器(1..$varNum){
my$length=length($VarStore{“var$counter”});
打印“变量$counter为$length字符长\n”;
}
您认为哈希是解决此问题的好方法,这是正确的。代码中有两个问题。首先,$VarStore{'var'$counter}
是无效语法,您需要使用
运算符连接字符串$VarStore{'var'.$counter}
,或者可以使用双引号将变量插入字符串$VarStore{“var$counter”}
与变量不同,您不能直接将函数调用插入字符串,因此length()调用应该单独完成。或者,您也可以将字符串与函数调用连接起来<代码>打印“变量$counter is”。长度($VarStore{“var$counter”})。“长\n”代码>
第二个问题是,在第一个while循环完成后,为下一个while循环重用的$counter变量将已经大于$varNum,因此需要将其重置为1<代码>$counter=1代码>
迭代计数可能更简单。此外,不需要sub-main,但如果使用它,则需要实际调用main()代码>某个地方,以便它运行
use strict;
use warnings;
my %VarStore;
print ("How many variables to create: ");
chomp(my $varNum = <STDIN>);
foreach my $counter (1..$varNum) {
print "Enter text to variable $counter: \n";
chomp(my $buffer = <STDIN>);
$VarStore{"var$counter"} = $buffer;
}
foreach my $counter (1..$varNum) {
my $length = length($VarStore{"var$counter"});
print "Variable $counter is $length character long \n";
}
使用严格;
使用警告;
我的商店;
打印(“要创建的变量数:”);
chomp(我的$varNum=);
foreach my$计数器(1..$varNum){
打印“将文本输入变量$counter:\n”;
chomp(我的$buffer=);
$VarStore{“var$counter”}=$buffer;
}
foreach my$计数器(1..$varNum){
my$length=length($VarStore{“var$counter”});
打印“变量$counter为$length字符长\n”;
}
很好的解释谢谢@grinz的精彩解释。这有助于:-)很好的解释谢谢,@Grinnz的精彩解释。它有帮助:-)次要的一点:这种语言叫做Perl,而不是Perl。次要的一点:这种语言叫做Perl,而不是Perl。