基本perl:得到这些循环错误

时间:2011-12-28 20:52:35

标签: perl

您好我在perl中有以下代码。我对这门语言很陌生:

#!/usr/bin/perl

use strict;
use warnings;

my $date = $ARGV[0];

my $symbols = ('A', 'B', 'C');


foreach $symbol (%symbols)
{
    my $print = "$symbol";
    print "$print";

}

获得:

Uselsss use of a constant in void context at (line of %symbols)
and
Global symbol "$symbol requires explicit package name at ..."
and
Global symbol "%symbols" require explicit package. name at ..."

4 个答案:

答案 0 :(得分:7)

只需要一个数组就可以使用哈希。

 #!/usr/bin/perl


    use strict;
    use warnings;

    my $date = $ARGV[0];

    my @symbols = ('A', 'B', 'C');


    foreach my $symbol (@symbols)
    {
        print $symbol;

    }

答案 1 :(得分:6)

1)您的$symbols应为@symbols,因为它是一个数组。在foreach的后面,%symbols应为@symbols

2)未声明$symbol。请改为foreach my $symbol...

答案 2 :(得分:3)

您声明$symbols而不是@symbols,因此它将其置于标量上下文中并将其设置为“C”。然后,您尝试循环使用您从未创建过的具有相同名称的哈希。请记住,$a(标量),@a(数组)和%a(哈希)都是不同的。

这就是你想要的:

my @symbols = qw/ A B C /; ## the same as ( 'A', 'B', 'C' )
foreach my $symbol ( @symbols ) {
    print $symbol;
}

非常快:

my @symbols = qw/ A B C /; ## new array with three values
my $symbols = qw/ A B C /; ## new scalar that is the last element of the "A B C" list ($symbols = 'C')
my %symbols = (
    A => 1,
    B => 2,
    C => 3,
); ## a hash with three key/value pairs

答案 3 :(得分:2)

您的foreach正在查看名为%symbols的不存在的哈希中的每个符号,而不是您的数组@symbols

foreach $symbol (@symbols)
{
    my $print = "$symbol";
    print "$print";
}