在Perl中动态存储变量

tav*_*ndo 1 perl

我试图在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等,具体取决于用户创建它们的输入.提前致谢.

Gri*_*nnz 8

你是正确的,哈希是解决这个问题的好方法.您的代码中有两个问题.首先,$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)

  • 很好的解释 (3认同)