Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中动态存储变量_Perl - Fatal编程技术网

在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

我试图在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 ++;
    }


}

知道我的代码为什么不起作用吗?我在这里想到了一个散列,这样我就可以创建动态变量,比如,根据用户为创建动态变量而提供的输入,使用键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。