базовый Perl: получение этих ошибок цикла - PullRequest
2 голосов
/ 29 декабря 2011

Привет, у меня есть следующий код в 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 ]

7 голосов
/ 29 декабря 2011

Вы используете Hash, когда Array - это все, что нужно.

 #!/usr/bin/perl


    use strict;
    use warnings;

    my $date = $ARGV[0];

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


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

    }
6 голосов
/ 29 декабря 2011

1) Ваш $symbols должен быть @symbols, так как это массив.Позже в foreach, %symbols должно быть @symbols.

2) $symbol не объявлено.Скажи foreach my $symbol... вместо.

3 голосов
/ 29 декабря 2011

Вы объявляете $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
2 голосов
/ 29 декабря 2011

Ваш foreach просматривает каждый символ в несуществующем хэше , который называется %symbols, а не в вашем массиве @symbols.

foreach $symbol (@symbols)
{
    my $print = "$symbol";
    print "$print";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...