我试图在Perl中动态存储和打印变量,方法是要求用户输入要创建的变量数,然后要求每个创建的变量添加信息,然后输出每个变量中包含的文本长度.在我脑海里,我想出了这个:
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 ++;
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是:
> How many variables to create: 3
> Enter text to variable 1: ABCQWEPOL
> Enter text to variable 2: xJSAG!HHKSKASK
> Enter text to variable 3: KakA
> Variable 1 is 9 character long
> Variable 2 is 14 character long
> Variable 3 is 4 character long
Run Code Online (Sandbox Code Playgroud)
有什么线索为什么我的代码不起作用?我想到了这里的哈希,以便我可以创建动态变量,例如使用键var1,var2,var3等,具体取决于用户创建它们的输入.提前致谢.
你是正确的,哈希是解决这个问题的好方法.您的代码中有两个问题.首先,$VarStore{'var'$counter}是无效的语法,您需要使用.运算符来连接字符串$VarStore{'var'.$counter},或者您可以使用双引号将变量插入到字符串中$VarStore{"var$counter"}.
与变量不同,您不能直接将函数调用插入到字符串中,因此length()调用应该单独完成.或者,您可以使用函数调用连接字符串.print "Variable $counter is " . length($VarStore{"var$counter"}). " long\n";
第二个问题是,在第一个while循环完成后,您为下一个while循环重用的$ counter变量已经大于$ varNum,因此您需要将其重置为1. $counter = 1;
使用foreach循环迭代计数可能更简单.此外,不需要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";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |